当我运行我的方法来下载文件时,在调用下一个方法“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();
}
答案 0 :(得分:5)
在DownloadFileCompleted事件中调用您的unzipfiles()
方法
答案 1 :(得分:2)
您正在异步进行下载,这意味着代码只是开始下载,然后在后台完成。下载完成后,会触发DownloadFileCompleted
事件并调用Completed
方法。
您应将unzipfiles
的呼叫转移到Completed
方法。
答案 2 :(得分:2)
您可以使用DownloadFile()
代替DownloadFileAsync()
。但是,这意味着在下载文件期间UI将被锁定,您应该尽量避免这种情况。
更好的解决方案是从您的unzipfiles()
方法中调用Completed()
。
答案 3 :(得分: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();
答案 4 :(得分:0)
您正在做的是调用下载文件的异步实现。
为简单起见,您可以使用 -
webClient.DownloadFile(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip");
没有事件registring。
如果要使用异步实现,这意味着在下载文件时,WebClient对象将调用 - 已完成方法 - 您可以在其中进行解压缩....