WebClient.DownloadFileAsync:实验
public void DownloadFile(string fileUrl, string localFile)
{
using (WebClient client = new WebClient())
{
downloadingFile = true;
client.DownloadFileCompleted += client_DownloadFileCompleted;
client.DownloadFileAsync(new Uri(fileUrl), localFile);
while (downloadingFile) { };
}
}
private void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
downloadingFile = false;
}
问题是DownloadFileCompleted事件从未被触发,所以我从未设置downloadingFile=false=>while循环从未结束。
有什么问题吗?
谢谢!
这似乎是一个逻辑错误(死锁情况),因为您的主线程在一个条件上处于连续循环中,即使下载完成,也从来没有时间引发事件。
解决方案#1:删除while(downloadingFile){};行来释放主线程,如果你想保持控制流,你可以让你的方法DownloadFile异步,并使用下面的代码行来获得DownloadFile方法的适当变体。
await client.DownloadFileTaskAsync(new Uri(fileUrl), localFile);
您必须从事件处理程序(Client_DownloadFileCompleted)返回类型为AsyncCompletedEventHandler的实例,而不是void。
有关详细信息,请参阅MSDN链接。