我想为我的程序做一个下载管理器。但是当我运行这段代码时,它给我的消息框说"下载开始了",但就是这样。我没有得到任何文件下载或进度条更改?有人知道为什么吗?
Public Class frmDownloader
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WebClient1.DownloadFileAsync(New Uri("https://s3.amazonaws.com/MinecraftDownload/launcher/Minecraft_Server.exe"), "C:hi.exe")
MsgBox("download started")
End Sub
Private Sub WebClient1_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles WebClient1.DownloadProgressChanged
ProgressBar1.Value = e.ProgressPercentage
MsgBox("Download Progress Changed")
End Sub
End Class
在与开始下载的线程不同的线程上调用DownloadProgressChanged
方法。在这个回调中,你似乎在操纵一些GUI元素:ProgressBar1.Value
。永远不要在与创建GUI元素的线程不同的线程上操作它们,否则可能会出现异常。根据您正在处理的应用程序类型,有不同的方式来封送GUI线程上的调用。例如,在WinForms中,你应该使用控件。BeginInvoke方法。在WPF和Silverlight中,等价的是Dispatcher.BeginInvoke.