VB.net Webclient.DownloadFileAsync не загружается - PullRequest
0 голосов
/ 11 декабря 2011

Я пытаюсь сделать менеджер загрузок для моей программы. Но когда я запускаю этот код, он выдает мне сообщение «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 Ответ

2 голосов
/ 11 декабря 2011

Метод DownloadProgressChanged вызывается в потоке, отличном от того, который начал загрузку. Внутри этого обратного вызова вы, кажется, манипулируете некоторым элементом графического интерфейса: ProgressBar1.Value. Вы никогда не должны манипулировать элементами GUI в потоках, отличных от того, в котором они были созданы, иначе вы можете получить исключение. В зависимости от типа приложения, над которым вы работаете, существуют различные способы маршалинга вызовов в потоке графического интерфейса. Например, в WinForms вы должны использовать метод Control.BeginInvoke . В WPF и Silverlight эквивалентом является Dispatcher.BeginInvoke .

...