2009-07-29 70 views
0

是否有可能從異步操作的Completed事件中拋出異常?從AsyncCompletedEvent拋出異常

我的情況是,我正在使用WebClient類並執行異步下載。如果遇到錯誤,那麼我可以通過WebClient.DownloadFileCompleted事件的AsyncCompletedEventArgs來檢索它。

然而,我真正想要做的是,將這個異常進一步向堆棧上方等待此下載完成的其他代碼區域發送,因此將錯誤報告給用戶的方法不必將其管理在較低水平。

有誰知道如果/如何做到這一點?目前我得到一個UnhandledException,因爲這個事件顯然是從外部代碼中調用的。

回答

2

如果您使用的是異步,那麼其他代碼通常不會主動(甚至被動)等待完成。回調發生在一個單獨的線程,所以沒有;你不能真正提出錯誤並讓它中斷你的主線程。

您需要設置一個標誌,指出發生了什麼不愉快的事情(可能包括異常實例) - 讓其他代碼在選擇時查詢它(儘管您可能會觸摸gate/mutex/monitor來幫助通知其他線程)。這種方法部分通過BackgroundWorker方法完成,其中始發線程(通知時)可以接收異常。

+0

感謝馬克。這是我最後採用的方法。 – Ian 2009-07-29 15:42:43

1

假設你有一個靜態參考調度,另一種選擇是提高UI線程上的異常:

Dispatcher.BeginInvoke(() => { throw new Exception("Example"); });