2011-06-25 66 views
1

當我運行我的下載文件的方法時,它不會等待下載完成,然後再調用下一個方法「unzipfiles」,我怎麼才能讓它等到下載文件?用C下載文件#

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

呼叫在DownloadFileCompleted事件

2

你做異步下載,這意味着代碼只是開始下載,然後在後臺完成的unzipfiles()方法。下載完成後,將觸發DownloadFileCompleted事件並調用Completed方法。

您應該將呼叫移至unzipfilesCompleted方法。

2

您可以使用DownloadFile()而不是DownloadFileAsync()。但是,這意味着在下載文件的過程中UI會被鎖定,您應該儘量避免這種情況。

更好的解決辦法是從Completed()方法中調用unzipfiles()

1

你應該解壓在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

你在做什麼在呼喚下載文件的異步執行。

爲了簡單起見,你可以使用 -

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

如果沒有在註冊的事件。

如果你想使用異步執行,這意味着,當文件被下載WebClient的對象將調用 - 完成方法 - 在這裏你可以做解壓....