我熟悉以下內容:的BackgroundWorker RunWorkerCompleted在組件
「如果操作引發你的代碼不處理異常,BackgroundWorker的捕捉異常,並將其傳遞到RunWorkerCompleted事件處理程序,在那裏作爲System.ComponentModel.RunWorkerCompletedEventArgs的Error屬性公開。如果您正在Visual Studio調試器下運行,調試器將在DoWork事件處理程序中發生未處理異常的位置中斷。
但是,我遇到了一個奇怪的故障。
在我的組件中,有一個BackgroundWorker實例。
即使它沒有在調試器中運行,異常仍然未被處理。
即使是簡單的代碼產生未處理的異常(和RunWorkerCompleted不火):
Throw New ArgumentException("Test")
最主要的是RunWorkerComplete的代碼:
RaiseEvent UpdateComplete(Me, New AsyncCompletedEventArgs(e.Error, e.Cancelled, e.Result))
我需要的組件暴露工人通過公共事件例外。
如果我刪除了RaiseEvent調用,則該異常將由worker處理,並可通過e.Error進行訪問。
顯然,提高事件會導致工作人員錯過異常。怎麼可能?
全碼:
組件:
Private Sub workerDownloader_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
RaiseEvent UpdateComplete(Me, New AsyncCompletedEventArgs(e.Error, e.Cancelled, e.Result))
End Sub
Private Sub workerDownloader_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Throw New ArgumentException("Test")
End Sub
主機的應用程序(的WinForms):
Private Sub Connector1_UpdateComplete(ByVal sender As System.Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles Connector1.UpdateComplete
If e.Error IsNot Nothing Then MessageBox.Show(e.Error.ToString)
End Sub
您能提供一個完整的代碼示例嗎?我不清楚「RunWorkerComplete」是什麼。 – 2010-06-01 16:55:39
剛發佈。謝謝史蒂夫 – SharpAffair 2010-06-01 17:22:47
我已經更新了我的答案,更詳細地解釋了爲什麼我相信你會遇到這個問題。看看,讓我知道它是否有幫助。 – 2010-06-01 18:09:44