簡體   English   中英

C#DownloadSync事件未觸發

[英]C# DownloadSync event not fired

試用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循環永遠不會結束。

對出什么問題有任何想法嗎?

謝謝!

您必須從事件處理程序(Client_DownloadFileCompleted)返回類型為AsyncCompletedEventHandler的實例,並且不能為空。

有關更多詳細信息,請參見MSDN鏈接

這似乎是一個邏輯錯誤(有點死鎖的情況),因為您的主線程在某種情況下處於連續循環中,即使下載完成也永遠沒有時間引發事件。

解決方案1:刪除while(downloadingFile){}; 釋放主線程的行,如果要保留控制流,則可以使方法DownloadFile異步,並使用以下代碼行來等待DownloadFile方法的各種形式。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM