【发布时间】:2017-05-31 21:46:47
【问题描述】:
所以,我有一个显示从 FTP 下载进度的脚本。
我只是尝试了很多方法来解决这个任务。
其中一个结论是 cmdlet Register-ObjectEvent 是一个非常糟糕的主意。Powershell 对异步事件的支持相当差...
然后我停在那里 -
$webclient.add_DownloadProgressChanged([System.Net.DownloadProgressChangedEventHandler]$webclient_DownloadProgressChanged )
....
$webclient_DownloadProgressChanged = {
param([System.Net.DownloadProgressChangedEventArgs]$Global:e)
$progressbaroverlay1.value=$e.ProgressPercentage
....
}
此脚本中的所有内容都运行良好,但您可以理解我这样做是为了一个文件。
但后来我开始思考 - 如何同时下载多个文件并将其显示在一个进度条中?
那么有人有什么好主意吗?还是解决此任务的最佳方法?
附言
WebClient 一次只能下载一个文件。
当然,我知道。
【问题讨论】:
-
两个进度条,第一个显示y个文件中的x个,第二个显示第二个文件的进度?否则,您必须找到每个文件的大小,跟踪下载的总字节数,并对其进行数学运算以完成您的百分比。
-
所以,制作多个网络客户端。有一个脚本范围变量,它们都随着各自的进度而更新,并让进度条显示(他们的进度总和/有多少)..
-
@TessellatingHeckler 可以,但不能同时运行两个或多个 $WebClient.DownloadFileAsync。
-
@DaniilKuzmin 我制作了两个 WebClient 对象,将它们都设置为异步下载,它对我有用;看看 Process Monitor 如何跟踪同时写入的两个 ISO 文件,这两个文件都下载了数百 Mb(偏移量),没有排队或失败? i.imgur.com/N82WoEO.png
-
@TessellatingHeckler 没那么简单)..当您使用 EventHandler 时,游戏即将发生变化。现在你可以尝试在没有 write-progress 和 Register-ObjectEvent 的情况下显示 $e.ProgressPercentage。
标签: powershell handler webclient