Application.UnhandledException Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando el código de la aplicación puede controlar una excepción, tal como se reenvía desde un error de Windows Runtime de nivel nativo. Las aplicaciones pueden marcar la repetición como controladas en los datos de eventos.
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
Tipo de evento
Comentarios
El UnhandledException
evento se usa para notificar a la aplicación las excepciones detectadas por el marco XAML o por el Windows Runtime en general que el código de la aplicación no ha controlado.
Por ejemplo, si el Windows Runtime invoca código de aplicación como un controlador de eventos y el código de la aplicación inicia una excepción y no lo detecta, la excepción se propagará de nuevo a la Windows Runtime. A continuación, el Windows Runtime desencadenará el UnhandledException
evento para notificar a la aplicación esta excepción.
Controlar excepciones en un UnhandledException
es solo una de las muchas técnicas que se pueden usar tanto para la depuración como para el control de excepciones en tiempo de ejecución y la posible recuperación. Para obtener más información sobre el conjunto completo de técnicas que puede usar para la depuración y el control de errores, consulte Control de excepciones (Guía de programación de C#).
Tenga en cuenta que este evento solo se activará cuando ya no haya ninguna posibilidad de que el código de la aplicación pueda detectar una excepción. Por ejemplo, imagine que un controlador de eventos de aplicación llama a una API de Windows Runtime que, a su vez, invoca una devolución de llamada. Si el código interno de la aplicación produce una excepción y no la detecta, la excepción se propagará a través del Windows Runtime de nuevo a la capa externa de código de la aplicación, lo que le dará la oportunidad de detectarlo. El UnhandledException
evento solo se desencadena cuando no hay más oportunidades para que el código de la aplicación detecte una excepción a través de la propagación normal.
También es posible que se produzca una excepción y nunca tenga ninguna posibilidad de ser detectada por el código de la aplicación. Por ejemplo, si el marco XAML está realizando el diseño y se produce una excepción, esta excepción no se propagará a través de ningún código de aplicación. En este caso, el UnhandledException
evento se activa y esta será la primera vez que se notifique cualquier código de aplicación sobre la excepción.
Normalmente después de que se desencadene el UnhandledException
evento, el Windows Runtime finaliza la aplicación porque la excepción no se ha controlado. El código de la aplicación tiene algún control sobre esto: si el UnhandledException
controlador de eventos establece la propiedad Handled de los argumentos true
de evento en , en la mayoría de los casos la aplicación no se finalizará. Sin embargo, no se recomienda hacerlo de forma rutinaria por varias razones:
- Normalmente, el
UnhandledException
controlador de eventos no tiene suficiente información para saber si continuar después de una excepción es seguro. Las partes del código de la aplicación o el Windows Runtime pueden estar en un estado incoherente, lo que podría dar lugar a errores posteriores si la aplicación sigue ejecutando su código. - El Windows Runtime considera las excepciones detectadas durante ciertas operaciones como irrecuperables, ya que el Windows Runtime en sí mismo estará en un estado incoherente después de estas excepciones. Para estas excepciones, incluso si el
UnhandledException
controlador de eventos establece Handled entrue
, la aplicación seguirá finalizando. - Los errores que se producen durante la navegación podrían provocar un estado en el que no hay nada cargado como contenido y nada para indicar al usuario que la aplicación todavía se está ejecutando.
- Para obtener más información sobre estos puntos, vea Control de excepciones (Guía de programación de C#).
Una limitación notable es que los UnhandledException
argumentos del evento no contienen tanto detalle como la excepción original que se propaga desde el código de la aplicación. Siempre que sea posible, si la aplicación requiere un procesamiento específico de una excepción determinada, siempre es mejor detectar la excepción a medida que se propaga, ya que habrá más detalles disponibles entonces. Los UnhandledException
argumentos de evento exponen un objeto de excepción a través de la propiedad Exception . Sin embargo, no se garantiza que el tipo, el mensaje y el seguimiento de pila de este objeto de excepción coincidan con los de la excepción original que se generó. Los argumentos del evento exponen una propiedad Message . En la mayoría de los casos, esto contendrá el mensaje de la excepción generada originalmente.
No se pueden conectar controladores para UnhandledException
en XAML (en el elemento Application de App.xaml). Debe adjuntar controladores para UnhandledException
en el objeto Application en el código, ya sea en el constructor o en la lógica de activación.