C#下载同步事件未激发

本文关键字:事件 下载 同步 | 更新日期: 2023-09-27 18:30:11

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循环从未结束。

有什么问题吗?

谢谢!

C#下载同步事件未激发

这似乎是一个逻辑错误(死锁情况),因为您的主线程在一个条件上处于连续循环中,即使下载完成,也从来没有时间引发事件。

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

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

您必须从事件处理程序(Client_DownloadFileCompleted)返回类型为AsyncCompletedEventHandler的实例,而不是void。

有关详细信息,请参阅MSDN链接。