Если у меня есть существующий объект исключения (я не в блоке перехвата, мне просто довелось получить объект исключения), есть ли способ (пере) выбросить его, сохранив трассировки стека?
Контекст для запроса заключается в том, что я пишу обработчик 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, похоже, имеет несколько похожих вопросов, но я не нашел ничего, что описывает эту конкретную ситуацию.