Поделиться через


Application.UnhandledException Событие

Определение

Возникает, когда исключение может быть обработано кодом приложения, переадресованным из ошибки среда выполнения Windows машинного уровня. Приложения могут помечать событие как обработанное в данных события.

public:
 virtual event UnhandledExceptionEventHandler ^ UnhandledException;
// Register
event_token UnhandledException(UnhandledExceptionEventHandler const& handler) const;

// Revoke with event_token
void UnhandledException(event_token const* cookie) const;

// Revoke with event_revoker
Application::UnhandledException_revoker UnhandledException(auto_revoke_t, UnhandledExceptionEventHandler const& handler) const;
public event UnhandledExceptionEventHandler UnhandledException;
function onUnhandledException(eventArgs) { /* Your code */ }
application.addEventListener("unhandledexception", onUnhandledException);
application.removeEventListener("unhandledexception", onUnhandledException);
- or -
application.onunhandledexception = onUnhandledException;
Public Custom Event UnhandledException As UnhandledExceptionEventHandler 

Тип события

Комментарии

Событие UnhandledException используется для уведомления приложения об исключениях, встречающихся платформой XAML или среда выполнения Windows в целом, которые не были обработаны кодом приложения.

Например, если среда выполнения Windows вызывает код приложения, как обработчик событий, а код приложения создает исключение и не перехватывает его, исключение будет распространяться обратно на среда выполнения Windows. Затем среда выполнения Windows вызовет событие UnhandledException, чтобы уведомить приложение об этом исключении.

Обработка исключений в UnhandledException является лишь одним из многих методов, которые можно использовать как для отладки, так и для обработки исключений во время выполнения и возможного восстановления. Дополнительные сведения о полном наборе методов, которые можно использовать для отладки и обработки ошибок, см. в статье Обработка исключений для в C# или Visual Basic.

Обратите внимание, что это событие срабатывает только в том случае, если больше нет возможности перехвата исключения в коде приложения. Например, представьте, что обработчик событий приложения вызывает API среда выполнения Windows, который, в свою очередь, вызывает обратный вызов. Если внутренний код приложения создает исключение и не перехватывает его, исключение будет распространяться через среда выполнения Windows обратно на внешний уровень кода приложения, который получает возможность перехватить его. Событие UnhandledException запускается только в том случае, если код приложения больше не может перехватывать исключение путем обычного распространения.

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

Обычно после запуска события UnhandledException среда выполнения Windows завершает работу приложения, так как исключение было необработанным. Код приложения имеет некоторый контроль над этим: если обработчик событий UnhandledException задает свойству Handled аргументов события значение true, то в большинстве случаев приложение не будет завершено. Однако делать это регулярно не рекомендуется по нескольким причинам:

  • Как правило, обработчик событий UnhandledException не имеет достаточно информации, чтобы узнать, является ли продолжение после исключения безопасным. Части кода приложения или среда выполнения Windows могут находиться в несогласованном состоянии, что может привести к последующим сбоям, если приложение продолжает выполнять свой код.
  • Среда выполнения Windows считает исключения, возникшие во время определенных операций, невосстановимыми, так как сама среда выполнения Windows будет находиться в несогласованном состоянии после этих исключений. Для таких исключений, даже если обработчик событий UnhandledException задает значение Handledв значение true, приложение по-прежнему будет завершено.
  • Ошибки, возникающие во время навигации, могут привести к тому, что ничего не загружается как содержимое и не указывает пользователю на то, что приложение по-прежнему работает.
  • Дополнительные сведения об этих аспектах см. в статье Обработка исключений для в C# или Visual Basic.

Важное ограничение заключается в том, что аргументы события UnhandledException не содержат столько сведений, сколько исходное исключение, распространяемое из кода приложения. По возможности, если приложению требуется определенная обработка определенного исключения, всегда лучше перехватывать исключение по мере его распространения, так как в этом случае будут доступны дополнительные сведения. Аргументы события UnhandledException предоставляют объект исключения с помощью свойства Exception . Однако тип, сообщение и трассировка стека этого объекта исключения не гарантируются в соответствии с типом исходного исключения, которое было создано. Аргументы события предоставляют свойство Message . В большинстве случаев это будет содержать сообщение о первоначально созданном исключении.

Невозможно подключить обработчики для UnhandledException в XAML (в элементе Application в App.xaml). Необходимо прикрепить обработчики unhandledException к объекту Application в коде либо в конструкторе, либо в логике активации.

Для Windows 8.1 приложений исключения из вызовов асинхронных методов могут распространяться как событие UnhandledException. Сюда входят собственные реализации асинхронных методов (обработчики активации и т. д.).

Применяется к

См. также раздел