C#DownloadSync事件未被触发

时间:2016-01-14 04:31:14

标签: c# webclient downloadfileasync

尝试使用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循环永远不会完成。

对于出了什么问题的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

您必须从eventhandler(Client_DownloadFileCompleted)返回AsyncCompletedEventHandler类型的实例,而不是无效。

有关详细信息,请参阅MSDN link

答案 1 :(得分:0)

这似乎是一个逻辑错误(一种死锁情况),因为你的主线程在条件上持续循环,即使下载完成也永远不会有时间引发事件。

解决方案#1:删除while(downloadsFile){};行释放主线程,如果你想保持控制流你可以使你的方法DownloadFile异步,并使用下面的代码行来等待DownloadFile方法的变量。

await client.DownloadFileTaskAsync(new Uri(fileUrl), localFile);