Обработка исключений .net на уровне приложения - PullRequest
2 голосов
/ 02 апреля 2009

Некоторое время назад я читал пару статей, в которых, как мне кажется, описывалось поведение, при котором вы можете в приложении .net (особенно в VB.net) разрешить возникновение исключения, а затем обработать его в каком-то приложении -уровень обработчик исключений, в отличие от блока Try / Catch. В данный момент у меня мало гугл-фу, поэтому мне не повезло догадаться, как называется эта функция, чтобы найти информацию о ней.

Если это прозвучит для любого из вас, можете ли вы указать мне в правильном направлении, как именно эта функция называется, чтобы я мог ее найти?

Образец кода всегда приветствуется, но в большинстве случаев я просто забыл название функции и не смог ее найти.

Ответы [ 4 ]

3 голосов
/ 02 апреля 2009

Полагаю, вы ищете событие AppDomain.UnhandledException. Это позволит вам обрабатывать любые исключения, которые не обрабатываются в выбранном вами домене приложений. Большинство приложений имеют только один домен приложений, поэтому этот код должен справиться с задачей

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyHandler

Однако попытка обработать событие здесь не самая лучшая идея. Это сработает для любого исключения, сгенерированного из любой части кода. Это может легко стать исключением, которое является фатальным для некоторых компонентов, от которых вы зависите, и обработка этого может привести к дальнейшим, еще более серьезным ошибкам в будущем.

Я обычно использую это событие исключительно в сценариях регистрации и сообщения об ошибках.

2 голосов
/ 05 июня 2009

Джефф Этвуд написал замечательную статью CodeProject под названием «Удобная для пользователя обработка исключений» http://www.codeproject.com/KB/exception/ExceptionHandling.aspx, которую я нашел действительно полезной в качестве основы для создания собственного обработчика последней инстанции. Он находится на VB.Net, но в комментариях есть перевод на C #.

2 голосов
/ 02 апреля 2009

Эта ссылка http://msdn.microsoft.com/en-us/library/3a02k5s0(VS.80).aspx покажет вам, как добавить обработчик. Я согласен с тем, что неправильно обрабатывать исключения таким образом. ИМХО это обработчик последней инстанции.

1 голос
/ 02 апреля 2009

Для веб-приложений вы можете обработать это в Global.asax.cs в методе Application_Error. Вот наш код:

protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = HttpContext.Current.Server.GetLastError();

        if (ex is HttpUnhandledException && ex.InnerException != null)
            ex = ex.InnerException;

        SendErrorMail(ex);  //Or log in database or whatever you want to do with it
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...