Как вы можете генерировать существующее исключение, сохраняя его трассировку стека в VB? - PullRequest
0 голосов
/ 18 ноября 2011

Если у меня есть существующий объект исключения (я не в блоке перехвата, мне просто довелось получить объект исключения), есть ли способ (пере) выбросить его, сохранив трассировки стека?

Контекст для запроса заключается в том, что я пишу обработчик RunWorkerCompleted. Если во время выполнения фоновой задачи произошла ошибка, она будет отображаться в свойстве Error объекта RunWorkerCompletedEventArgs. Для простоты кода я хочу использовать тот же код обработки ошибок, чтобы перехватить это, или любую ошибку, которая произойдет позже во время обработки. Это значит, что мне нужен такой код:

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 Ответ

1 голос
/ 31 декабря 2011

В .NET 4.5 есть функция, которая будет делать то, что вы хотите.Но поскольку это вам сейчас не поможет, ваш единственный вариант - заключить его в другое исключение.

...