0

ユーザーがフォームで選択した内容に基づいて、複数のファイルをダウンロードしようとしています。複数のチェックボックスが配置されているため、ユーザーがチェックボックス 1、3、4 を選択した場合、Web クライアントにファイル 1.txt、3.txt、4.txt をダウンロードさせます。WebClient メソッドが原因で、「WebClient は同時 I/O 操作をサポートしていません。」エラー。

If chk1.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/1.txt), Path.Combine(DataSource & strDirectory, "1.txt"))
    End If
If chk2.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/2.txt), Path.Combine(DataSource & strDirectory, "2.txt"))
    End If
If chk3.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/3.txt), Path.Combine(DataSource & strDirectory, "3.txt"))
    End If
If chk4.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/4.txt), Path.Combine(DataSource & strDirectory, "4.txt"))
    End If

ダウンロードを追跡する進行状況バーと、メッセージボックスを呼び出す完了イベントがあります。

Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles WC.DownloadProgressChanged
    ProgressBar1.Value = e.ProgressPercentage

End Sub
Private Sub WC_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles WC.DownloadFileCompleted
    MessageBox.Show("Download complete", "Download", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

チェックされたすべてのファイルをダウンロードするようにこれをプログラミングするにはどうすればよいですか? ダウンロードされたファイルの合計数や残り時間を示すプログレス バーのみがユーザーに表示されてもかまいませんが、すべてのダウンロードが完了したときに何かを表示する必要があります。

助言がありますか?

4

1 に答える 1

2

単一の WebClient インスタンスを使用して複数の HTTP リクエストを同時に実行しているためだと思います。いくつかのインスタンスを使用してみてください。

于 2012-01-11T10:10:27.483 に答える