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.

Другие вопросы по тегам