2011-11-18 48 views
0

如果我有一個現有的異常對象(我是而不是在一個catch塊中,我只是碰巧給了一個異常對象),有什麼方法(重新)拋出它,同時保留它的堆棧跟蹤?如何在VB中保留堆棧跟蹤的同時拋出現有異常?

詢問的上下文是我正在寫一個RunWorkerCompleted處理程序。如果在運行後臺任務時發生錯誤,那麼這將顯示在RunWorkerCompletedEventArgs的Error屬性中。爲了保持代碼簡單,我希望使用相同的錯誤處理代碼來捕獲此錯誤,或者在處理程序期間稍後發生任何錯誤。這意味着我需要這樣的代碼:

Private Sub OnDone(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) 

Try 
    If e.Error IsNot Nothing Then Throw e.Error ' But how do I keep its stack trace? 
     ' do other work that might throw an exception 
    Catch ex As Exception 
     ' handle any exceptions 
End Try 

End Sub 

我不認爲這裏使用的InnerException(即說像拋出新的異常(前))會工作,因爲當時我有我的catch塊問題無法知道它應該處理的異常是外部還是內部異常。

StackOverflow似乎有各種類似的問題,但我還沒有找到任何描述這種特殊情況的東西。

+0

爲什麼你需要重新拋出它?你能不能在if語句中爲這個特定的異常寫錯誤處理代碼,從而保存堆棧跟蹤? –

+0

If語句中異常的錯誤處理代碼與將在Catch塊中執行的錯誤處理代碼完全相同,因此雖然我可以在兩個地方重複代碼,但這些代碼都不是很理想 - 會使代碼更難讀取。 – PhantomDrummer

+0

在兩個位置調用的單獨函數中有錯誤處理代碼的情況如何?或者,有一個錯誤變量和一個foundError變量,並將它們設置爲if和catch語句,然後在try-catch塊之後處理錯誤。 –

回答

1

.NET 4.5中有一項功能可以滿足您的需求。但既然現在不能幫你,你唯一的選擇就是把它換成另一個例外。

相關問題