Глобальная обработка исключений в .NET? - PullRequest
4 голосов
/ 09 июля 2010

Вся концепция обработки исключений вызывает у меня головную боль. В настоящее время я хочу обработать определенные исключения, которые, я уверен, я могу обработать. С другой стороны, я хочу завершить приложение, если выдается исключение, которое я не знаю, как обрабатывать. Когда я помещаю блоки try-catch в свой исходный код, это выглядит ужасно, потому что их много. Существует ли глобальный механизм обработки исключений, например, событие, которое запускается после создания необработанного исключения? Таким образом, я могу отобразить сообщение об ошибке пользователю и завершить приложение, вместо того, чтобы повторять этот процесс снова и снова в моем исходном коде.

P.S. Я хочу завершить приложение в таком сценарии, потому что я боюсь, что программа может начать работать неправильно после создания необработанного исключения.

Ответы [ 3 ]

3 голосов
/ 09 июля 2010

В VB.NET вам нужно обработать My.Application.UnhandledException Событие:

Пример (из MSDN):

Private Sub MyApplication_UnhandledException( _
    ByVal sender As Object, _
    ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs _
) Handles Me.UnhandledException
    My.Application.Log.WriteException(e.Exception, _
        TraceEventType.Critical, _
        "Unhandled Exception.")
End Sub
2 голосов
/ 09 июля 2010

По крайней мере, в C # вы можете назначить глобальный «обработчик необработанных исключений».Для этого вы должны назначить новый обработчик для AppDomain.CurrentDomain.UnhandledException.

1 голос
/ 09 июля 2010

вы создаете приложение для создания форм для выигрыша или веб-приложение? Я написал запись в блоге на пользовательском Health Monitor , в котором вы можете отправлять исключения в базу данных. Затем в методе Application_Error вы добавляете такой код:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)  
    ''# Code that runs when an unhandled error occurs  
    Dim exception As Exception = HttpContext.Current.Server.GetLastError()  
    Dim emailerrors As Boolean = If(LCase(AppSettings.GetAppValue("EmailErrors")) = "yes", True, False)  
    HealthMonitor.Log(exception, emailerrors)  
End Sub 

То, что это будет делать, это перехватывать все необработанные ошибки (IE: ошибки за пределами вашего try / catch и регистрировать их. Оттуда (я перенаправляю) вы можете остановить свое приложение или делать все, что захотите.

...