2016-09-24 114 views
0

我在其他網站上看到過這個問題,但給出的答案總是對我造成某種例外,所以我會用我自己的代碼自問。如何使用進度欄顯示下載的百分比?

我想做一個程序來下載一個文件,並顯示一個進度條,而這樣做。

到目前爲止我的代碼

Private Sub AdwCleanerButton_Click(sender As Object, e As EventArgs) Handles AdwCleanerButton.Click 
    My.Computer.Network.DownloadFile(
    "https://www.dropbox.com/s/gg3ocih2dv3t3lg/adwcleaner_6.020.exe?dl=0", 
    "C:\Users\llexl\Desktop\adwcleaner_6.020.exe") 
End Sub 

我想顯示下載的百分比到進度。

+0

您能澄清一下您的問題到底是什麼嗎?現在還不明顯。 –

回答

1

最簡單的方法是使用DownloadFile的內置進度條,它會顯示一個帶有進度條和取消按鈕的小窗口。所有你必須添加到您的代碼如下參數:

My.Computer.Network.DownloadFile("https://www.dropbox.com/s/gg3ocih2dv3t3lg/adwcleaner_6.020.exe?dl=0", _ 
           "C:\Users\llexl\Desktop\adwcleaner_6.020.exe", "", "", True, 500, True) 

您在目標文件路徑之後看到的第一個真正的是創建進度窗口參數。


但是,如果你要查詢的文件的總大小,並得到整個下載的進度,以實現自己的進度條,過程變得更加複雜一點點。您必須創建一個事件處理程序來處理下載的進度更改事件,然後將正在接收的字節數轉換爲百分比並將該百分比應用於您的進度條...然後,您的下載代碼將顯示像:

Dim url As String = "https://www.dropbox.com/s/gg3ocih2dv3t3lg/adwcleaner_6.020.exe?dl=0" 
Dim savePath As String = "C:\Users\llexl\Desktop\adwcleaner_6.020.exe" 
Dim download As New WebClient() 
AddHandler download.DownloadProgressChanged, AddressOf Download_ProgressChanged 
download.DownloadFileAsync(New Uri(url), savePath) 

而且你的進步,改變處理程序:

Public Sub Download_ProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) 
    Try 
     ProgressBar1.Value = CInt(Math.Round((e.BytesReceived/e.TotalBytesToReceive) * 100, 0, MidpointRounding.AwayFromZero)) 
    Catch ex As Exception 
     Debug.Print(ex.ToString) 
    End Try 
End Sub 

但你是否能獲取文件的總大小從downloadprogress對象取決於是在文件的頭中的數據,所以並不總是有一個從它返回的號碼。您可能需要查找一個備用函數以在下載之前獲取文件大小以用於進度百分比計算。我相信Dropbox有一個API,您可以使用它獲取該類型的信息

相關問題