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

#vb.net #webclient #downloadfileasync

#vb.net #webclient #downloadfileasync

Вопрос:

Я пытаюсь загрузить несколько файлов на основе того, что пользователь выбрал в форме. У меня есть несколько флажков, поэтому, если пользователь установит флажки 1,3,4, я бы хотел, чтобы webclient загружал файлы 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 amp; strDirectory, "1.txt"))
    End If
If chk2.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/2.txt), Path.Combine(DataSource amp; strDirectory, "2.txt"))
    End If
If chk3.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/3.txt), Path.Combine(DataSource amp; strDirectory, "3.txt"))
    End If
If chk4.Checked Then
        WC.DownloadFileAsync(New Uri("http://www.google.com/4.txt), Path.Combine(DataSource amp; 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:

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