我正在使用DownloadFileAsync下載較大的文件(1.3 GB),但我想添加一個簡單的百分比指標(例如64%)。我是新來的Visual Basic我不知道如何做到這一點。Visual Basic控制檯應用程序下載百分比?
任何幫助,將不勝感激。
我正在使用DownloadFileAsync下載較大的文件(1.3 GB),但我想添加一個簡單的百分比指標(例如64%)。我是新來的Visual Basic我不知道如何做到這一點。Visual Basic控制檯應用程序下載百分比?
任何幫助,將不勝感激。
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
事件內更新標籤(因爲它也被調用並在後臺線程中運行) )。
因此,我們所做的是使用Form.Invoke
方法,它確保我們想要執行的任何操作都是在窗體自己的線程中執行。我們將Action
委託傳遞給包含我們要執行的代碼的Invoke
方法。而且該代碼只是更新標籤。
至少我找不到文檔中的任何說法,否則 - 事件可能實際上在前臺線程,但在這種情況下,上面的代碼仍然有效執行。
是的,我知道這一點。但我使用控制檯應用程序,我不知道如何使用它。 – davidwroxy
@ user1690292在控制檯應用程序中它更容易,只需將百分比輸出到控制檯而不是標籤。然後你也不需要通過'Invoke'進行繞行。 –
你能否爲此寫一個簡短的例子,因爲我不知道該怎麼做。 – davidwroxy