如何在VB中保留其堆栈跟踪时抛出现有异常?

时间:2011-11-18 12:00:42

标签: vb.net exception stack-trace

如果我有一个现有的异常对象(我在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似乎有各种类似的问题,但我没有找到任何描述这种特殊情况的东西。

1 个答案:

答案 0 :(得分:1)

.NET 4.5中有一项功能可以满足您的需求。但是,既然这对你现在没有帮助,你唯一的选择是将它包装在另一个例外中。