尝试使用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事件永远不会被触发,所以我从未设置过downloadFile = false => while循环永远不会完成。
对于出了什么问题的任何想法?
谢谢!
答案 0 :(得分:0)
您必须从eventhandler(Client_DownloadFileCompleted)返回AsyncCompletedEventHandler类型的实例,而不是无效。
有关详细信息,请参阅MSDN link。
答案 1 :(得分:0)
这似乎是一个逻辑错误(一种死锁情况),因为你的主线程在条件上持续循环,即使下载完成也永远不会有时间引发事件。
解决方案#1:删除while(downloadsFile){};行释放主线程,如果你想保持控制流你可以使你的方法DownloadFile异步,并使用下面的代码行来等待DownloadFile方法的变量。
await client.DownloadFileTaskAsync(new Uri(fileUrl), localFile);