Скачивание файлов с C # - PullRequest
1 голос
/ 26 июня 2011

Когда я запускаю свой метод для загрузки файла, он не ждет завершения загрузки перед вызовом следующего метода "unzipfiles", как я могу заставить его ждать, пока файл не будет загружен?

private void Download_Click(object sender, EventArgs e)
{
    WebClient webClient = new WebClient();
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
    webClient.DownloadFileAsync(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip");
    // Call unzip method
    unzipfiles();
}

Ответы [ 5 ]

5 голосов
/ 26 июня 2011

Вызовите ваш метод unzipfiles() в событии DownloadFileCompleted

2 голосов
/ 26 июня 2011

Вы можете просто использовать DownloadFile() вместо DownloadFileAsync().Однако это будет означать, что пользовательский интерфейс будет заблокирован во время загрузки файлов, и вам следует избегать этого.

Лучшим решением было бы вызвать unzipfiles() из вашего Completed() метода.

2 голосов
/ 26 июня 2011

Вы выполняете загрузку асинхронно, что означает, что код только начинает загрузку, которая затем выполняется в фоновом режиме. После завершения загрузки вызывается событие DownloadFileCompleted и вызывается ваш метод Completed.

Вы должны переместить вызов на unzipfiles в метод Completed.

1 голос
/ 26 июня 2011

Вы должны распаковать ваш Completed метод:

void Completed(object sender, AsyncCompletedEventArgs e)
{
    unzipfiles();
}

или запустить загрузку синхронно:

WebClient webClient = new WebClient();
webClient.DownloadFile(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip");
unzipfiles();
0 голосов
/ 26 июня 2011

То, что вы делаете, вызывает асинхронную реализацию Download File.

Для простоты вы можете использовать-

webClient.DownloadFile(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip");

Без регистрации событий.

Если вы хотите использовать асинхронную реализацию, это означает, что при загрузке файла объект WebClient вызовет - Completed метод - где вы можете выполнить распаковку ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...