我正在尝试为我的程序创建一个下载管理器。但是当我运行这段代码时,它会给我一个消息框说“Download Started”,但就是这样。我没有下载任何文件或进度条更改?有谁知道为什么?
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
答案 0 :(得分:2)
在与开始下载的线程不同的线程上调用DownloadProgressChanged
方法。在这个回调中你似乎在操纵一些GUI元素:ProgressBar1.Value
。您永远不应该在与创建它们的线程不同的线程上操作GUI元素,否则您可能会遇到异常。根据您正在使用的应用程序类型,有不同的方法来编组GUI线程上的调用。例如,在WinForms中,您应该使用Control.BeginInvoke方法。在WPF和Silverlight中,等效的是Dispatcher.BeginInvoke。