我有一個BackgroundWorker,它運行冗長和半複雜的任務。在這個BackgroundWorker中,我有幾個其他的BackgroundWorkers正在這個「主要工作者」中使用。BackgroundWorker中的BackgroundWorker - 錯誤處理
DoWork方法的所有代碼都已完成,但我在處理錯誤時遇到了一些麻煩。
如果在我的主要worker中引發異常,它會自動被捕獲,我可以在我的WorkerCompleted方法中檢索它。但是,如果在我的「子工作人員」中引發異常,它會被捕獲並返回給主工作人員(SubWorkerCompleted)。
現在我的問題:我該怎麼辦這個異常?向上報告這個最好的方法是什麼,所以我可以取消主要工作人員?
我首先想到的是在子工作者Completed方法this.CancelAsync()中調用。但是,我看不到其中一個子工作者的異常和用戶取消之間的區別。
在子工作者異常發生時(所以我可以取消主工作者),在主工作人員中實施某種事件看起來不太合適。
我也嘗試在子工作者異常作爲內部異常在主要工作者中拋出一個異常,但主工作者的Completed方法從未被錯誤調用。我認爲這是因爲子工作者的Completed方法(它在主工作者內部)是在與主工作者不同的線程上引發的?
現在,調用層次基本上是:UI - >主要工作人員 - >做的東西,同時啓動子工作人員(那東西)。
這是我第一次嘗試更復雜的東西(我是一個新手愛好者),所以任何提示都會感激。
確保它的功能與不使用BGW時相同。如果RunWorkerCompleted事件處理程序不爲null,則拋出e.Error。要轟炸你的程序。 – 2011-03-14 17:58:56