Вам нужно использовать задачи для достижения этой цели
Сначала сделайте вашу функцию загрузки асинхронной
private async TaskDownloadFile(string Filename, Uri Uri)
{
Console.WriteLine(Filename + " " + Uri);
_download_completed = false;
WebClient client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
await client.DownloadFileTaskAsync(Uri, Filename);
}
Сделайте метод асинхронным и дождитесь метода DownloadFileTaskAsync.
Я быпредлагаем удалить события для DownloadFileCompeted и DownloadProgressChanged, если вы будете делать несколько загрузок, они не имеют особого смысла
Теперь, когда вы сделали метод async, выполните следующие действия:
var file1DownloadTask = TaskDownloadFile("filename","url");
var file2DownloadTask = TaskDownloadFile("filename","url");
укажите, что у вас есть две задачи
Вы можете использовать Task.WaitAll (list_of_taks_goes_here)
Task.WaitAll(file1DownloadTask,file2DownloadTask )
Метод wait all будет ожидать завершения всех задач, поэтому вызывается следующая строка кодапосле того, как эти две задачи будут завершены
, вы можете изменить пользовательский интерфейс или выполнить все, что вам нужно после строки Task.WaitAll
Вы также можете сделать следующее
await TaskDownloadFile("filename","url");
await TaskDownloadFile("filename2","url");
, который будет ждать окончания загрузки, прежде чем перейти к следующей строке, но таким образом вы должны знать все файлы в момент написания кода, сПервым способом вы могли бы получить список файлов, из которых вы могли бы построить такты и передать их в Task.WaitAll