Вы можете использовать следующие события для перехвата исключений в приложениях Windows Forms и .Net Services:
AppDomain.FirstChanceException
Это событие срабатывает всякий раз, когда возникает исключение в данном домене приложений, даже если событие обрабатывается позже. Это почти наверняка не то, что вы хотите, но я подумал, что я бы включил это для полноты.
Обратите внимание, что это событие для отдельного домена приложений - если вы используете несколько доменов приложений, вам нужно обработать это событие для каждого из них. Если у вас есть только один домен приложений (более вероятно), то следующее событие будет обрабатывать это событие:
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
static void CurrentDomain_FirstChanceException(object sender, FirstChanceExceptionEventArgs e)
{
throw new NotImplementedException();
}
AppDomain.UnhandledException
Это событие вызывается всякий раз, когда в указанном домене приложения возникает исключение необработанное . Опять же, это событие для отдельного AppDomain, и оно подключено аналогично событию FirstChanceException
.
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
throw new NotImplementedException();
}
Вы можете перехватить эти два события в любой момент, когда захотите, однако, возможно, вы захотите сделать это как можно скорее, иначе могут возникнуть исключения, прежде чем вы подключите обработчик событий. Начало метода Main
в вашем классе Program
обычно является хорошим местом для этого.
Обратите внимание, что в приложении Windows Forms это событие может не вызываться, если в противном случае вы ожидаете, что необработанные исключения в приложениях Windows Forms обрабатываются по-разному (инфраструктурой Windows Forms) и поэтому иногда не распространяются как необработанные исключения в домене приложения.
Посмотрите на Почему мой блок Catch работает только во время отладки в Visual Studio?
Application.ThreadException
(только для приложений Windows Forms)
Это происходит при возникновении необработанного исключения в приложении Windows Forms, которое затем перехватывается инфраструктурой Windows Forms. Вы, вероятно, должны использовать это вместо AppDomain.UnhandledException
, чтобы перехватывать необработанные исключения в приложениях Windows Forms:
Application.ThreadException += Application_ThreadException;
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
throw new NotImplementedException();
}
Опять же, вы хотите подключить это как можно скорее - начало вашего метода Main
в классе Program
обычно является хорошим местом для этого.
Резюме
Обратите внимание, что ни один из них точно не похож на Application_Error
метод приложения ASP.Net, однако, если вы создаете приложение Windows Forms, вы , вероятно, хотите использовать Application.ThreadException
и если вы создаете Службу Windows, тогда вы вероятно хотите AppDomain.UnhandledException