如果我有一个现有的异常对象(我在catch块中不,我恰好有一个异常对象),是否有任何方法(重新)抛出它同时保留它的堆栈跟踪?
问的上下文是我正在编写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(即说类似Throw new Exception(ex)之类的东西)会起作用,因为我遇到的问题是我的Catch块无法知道它是否应该是异常处理是外部处理或内部处理。
StackOverflow似乎有各种类似的问题,但我没有找到任何描述这种特殊情况的东西。
答案 0 :(得分:1)
.NET 4.5中有一项功能可以满足您的需求。但是,既然这对你现在没有帮助,你唯一的选择是将它包装在另一个例外中。