我正在使用DownloadFileAsync下载更大的文件(1.3 GB),但我想添加一个简单的百分比指标(例如64%)。我是Visual Basic的新手我不知道如何做到这一点。
任何帮助都将不胜感激。
答案 0 :(得分:1)
如果您要更新进度显示,WebClient
类会有一个DownloadProgressChanged
事件,您可以收听该事件。例如,如果你有一个控制台应用程序,它就像:
Dim client As New WebClient()
AddHandler client.DownloadProgressChanged, AddressOf ProgressUpdate
client.DownloadFileAsync(yourURI, yourFile)
Sub ProgressUpdate(sender As Object, e As DownloadProgressChangedEventArgs)
' Reset cursor position …
Console.CursorTop -= 1
Console.CursorLeft = 0
Console.WriteLine("{0}% completed", e.ProgressPercentage)
End Sub
另一方面,如果您在WinForms项目的Form
上,并且您有一个要更新的标签ProgressLabel
,则以下代码将执行此操作:
Sub ProgressUpdate(sender As Object, e As DownloadProgressChangedEventArgs)
Dim s = String.Format("{0}% completed", e.ProgressPercentage)
Me.Invoke(New Action(Sub()
ProgressLabel.Text = s
End Sub))
End Sub
由于多线程,ProgressUpdate
方法有点复杂:
WebClient
正在后台线程中运行异步文件下载。但是,表单控件只能从运行表单的前台线程更新。因此,我们无法直接在ProgressUpdate
事件内更新标签(因为它也被调用并运行,在后台线程 1 )。
所以我们做的是使用Form.Invoke
方法,它保证我们想要执行的任何东西都是在表单自己的线程中执行。我们将Action
委托传递给Invoke
方法,该方法包含我们要执行的代码。而且该代码只是更新标签。
1 至少我在文档中找不到任何其他内容 - 事件可能实际在前台线程中执行但在这种情况下上面的代码仍然有效