問題:重新使用.NET Backgroundworker,是否沒有辦法讓異常通常返回主線程?.NET Backgroundworker - 有沒有辦法讓異常通常返回到主線程?
背景:
在我的WinForms應用程序- 目前我有通用的異常句柄線沿線的推移,如果(一個),那麼自定義應用程序的例外呈現給用戶,但不退出程序, (b)如其他異常再出現,然後退出應用程序
- 以上是很好的,因爲我可以只是把適當的異常在應用和演示隨時隨地/處理是一般處理
問題:重新使用.NET Backgroundworker,是否沒有辦法讓異常通常返回主線程?.NET Backgroundworker - 有沒有辦法讓異常通常返回到主線程?
背景:
在我的WinForms應用程序BackgroundWorker
自動返回異常。當您鉤住RunWorkerCompleted
事件時,它在AsyncCompletedEventArgs.Error屬性中。
如果你喜歡,你可以在這個事件處理程序中包裝和重新拋出異常 - 請記住,框架中有一個bug會導致「外部」異常,而不是因爲你處於一個Invoke
。
在.NET應用程序的後臺線程中發生的異常是一個災難性的錯誤,它會導致整個過程;解決此問題的唯一方法是將所有活動都包含在try-catch塊中,並保存發生的任何異常,這正是BackgroundWorker
所做的。
沒有,有ISN」噸。
相反,你可以繼承BackgroundWorker
和覆蓋OnRunWorkerCompleted
檢查e.Error
和運行異常處理程序,如果它不是null
類。
感謝您的想法 – Greg 2010-03-29 00:40:26
如果由DoWork調用的異步方法引發異常,該異常將對RunWorkerCompleted處理程序可用。你可以在那裏處理它。
private void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
...
}
從MSDN:
如果 異步操作過程中拋出一個異常,班會 例外分配給錯誤 財產。在訪問 之前,客戶端應用程序的 事件處理程序委託應檢查 Error屬性從 派生的類中的任何屬性AsyncCompletedEventArgs;否則, 該屬性將引發 TargetInvocationException,其 InnerException屬性持有對Error的引用 。
您是否嘗試過靜態Application.ThreadException事件?
@Aaronaught - 你的意思是「這將導致」內部「異常被拋出」? (感謝您的回覆) – Greg 2010-03-29 00:40:01
知道了!我剛剛在backgroundWorker1_RunWorkerCompleted內部創建了一個新的BusinessException,並將innerException設置爲「null」。 – Greg 2010-03-29 00:49:27