使用C#下载文件

时间:2011-06-25 21:22:51

标签: c# .net windows

当我运行我的方法来下载文件时,在调用下一个方法“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 个答案:

答案 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对象将调用 - 已完成方法 - 您可以在其中进行解压缩....