VB - Использование DownloadFileASync (WebClient) для нескольких загрузок - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь загрузить несколько файлов в зависимости от того, что пользователь выбрал в форме.У меня установлено несколько флажков, поэтому, если пользователь выберет флажки 1,3,4, я бы хотел, чтобы веб-клиент загружал файлы 1.txt, 3.txt, 4.txt.Метод WebClient вызывает «WebClient не поддерживает параллельные операции ввода-вывода».ошибка.

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

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

Любые предложения?

1 Ответ

2 голосов
/ 11 января 2012

Я думаю, это потому, что вы используете один экземпляр WebClient для одновременного выполнения нескольких HTTP-запросов.Попробуйте использовать несколько экземпляров.

...