0

プログラムのダウンロード マネージャーを作成しようとしています。しかし、このコードを実行すると、「ダウンロード開始」というメッセージ ボックスが表示されますが、それだけです。ファイルのダウンロードや進行状況バーの変化がありませんか? 誰かが理由を知っていますか?

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
4

1 に答える 1

2

メソッドは、DownloadProgressChangedダウンロードを開始したスレッドとは別のスレッドで呼び出されます。このコールバック内では、いくつかの GUI 要素を操作しているようです: ProgressBar1.Value. 作成されたスレッドとは異なるスレッドで GUI 要素を操作しないでください。そうしないと、例外が発生する可能性があります。作業しているアプリケーションのタイプに応じて、GUI スレッドで呼び出しをマーシャリングするさまざまな方法があります。たとえば、WinForms ではControl.BeginInvokeメソッドを使用する必要があります。WPF と Silverlight では、同等のものはDispatcher.BeginInvokeです。

于 2011-12-11T10:05:19.493 に答える