VB — использование DownloadFileASync (WebClient) для нескольких загрузок

Я пытаюсь загрузить несколько файлов на основе того, что пользователь выбрал в форме. У меня есть несколько флажков, поэтому, если пользователь выберет флажки 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

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

Какие-либо предложения?


person Fernando Garcia    schedule 28.10.2011    source источник


Ответы (1)


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

person Apple    schedule 11.01.2012