VB.net Webclient.DownloadFileAsync не загружается
Я пытаюсь сделать менеджер загрузок для моей программы. Но когда я запускаю этот код, он выдает мне сообщение "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
1 ответ
DownloadProgressChanged
Метод вызывается в другом потоке, чем тот, который начал загрузку. Внутри этого обратного вызова вы, кажется, манипулируете некоторым элементом GUI: ProgressBar1.Value
, Вы никогда не должны манипулировать элементами графического интерфейса в потоках, отличных от того, в котором они были созданы, иначе вы можете получить исключение. В зависимости от типа приложения, над которым вы работаете, существуют различные способы маршалинга вызовов в потоке графического интерфейса. Например, в WinForms вы должны использовать метод Control.BeginInvoke. В WPF и Silverlight эквивалентом является Dispatcher.BeginInvoke.