2016-09-24 84 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,您可以使用它获取该类型的信息

相关问题