VB.net Webclient.DownloadFileAsync не загружается

Я пытаюсь сделать менеджер загрузок для своей программы. Но когда я запускаю этот код, он дает мне окно сообщения «Загрузка начата», но это все. У меня не загружается ни один файл или индикатор выполнения не меняется? Кто-нибудь знает, почему?

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

person Kuzon    schedule 11.12.2011    source источник


Ответы (1)


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

person Darin Dimitrov    schedule 11.12.2011
comment
Спасибо за ответ... Но я не понимаю, извините. Не могли бы вы привести пример? :) Спасибо. Я работаю только над обычным проектом формы. Мне нужно просто загрузить файл .jar для программы настройки моего игрового сервера. - person Kuzon; 11.12.2011
comment
@Kuzon, если вы занимаетесь разработкой WinForms/WPF, вам обязательно следует прочитать об этой проблеме. Вот хороший пост в блоге, в котором подробно объясняется: 126345.aspx - person Darin Dimitrov; 11.12.2011
comment
О, чувак... Это немного выше моего уровня XD Я 14-летний самоучка... Я действительно борюсь с этим, думаю, я просто откажусь от этой идеи на данный момент, я просто не могу понять обойдите этот банкомат :( Спасибо за помощь... Я даже не знаю, что означает разработка WinForms/WPF... Все, что я знаю, это то, что я захожу в VB.net и нажимаю форму приложения... Я так запутался XD - person Kuzon; 11.12.2011