container c# .net wpf exception-handling unhandled-exception

c# - container - Diferencia entre UnhandledException y DispatcherUnhandledException en.NET



tooltip wpf (3)

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

dice:

"DispatcherUnhandledException es generada por una aplicación para cada excepción que no es manejada por el código que se ejecuta en el hilo principal de la interfaz de usuario".

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

dice:

"Este evento se puede manejar en cualquier dominio de la aplicación. Sin embargo, el evento no necesariamente se genera en el dominio de la aplicación donde se produjo la excepción".

Por lo tanto, DispatcherUnhandledException es para excepciones de subprocesos de UI, y AppDomain.UnhandledException es para todo lo demás.

¡Espero que ayude!

¿Cuál es la diferencia entre AppDomain.UnhandledException y Application.DispatcherUnhandledException en .NET?

Necesito un evento que se activa cuando se produce una excepción no controlada. Me he encontrado con estos dos, pero no sé de qué manera se diferencian entre sí. Además, ¿hay casos en que no son despedidos?


DispatcherUnhandledException solo es generada por el subproceso de la interfaz de usuario y solo si se generó una excepción al ejecutar un evento. Existe un poco de tradición para manejar este tipo de excepciones especialmente, Windows Forms también lo tiene con la excepción Application.ThreadException (mal llamado, nada que ver con los hilos).

La razón es que hay una pequeña posibilidad de manejar la excepción y mantener el programa activo, ya que los controladores de eventos de IU no siempre mutan el estado del programa demasiado dramáticamente. Esto requiere una gran ayuda de ilusiones. Windows Forms lleva esto a un extremo, muestra un ThreadExceptionDialog que tiene un botón Continuar, lo que permite al usuario ignorar la excepción. WPF no hace eso, tendrías que escribir un diálogo así. Es por eso que el evento está ahí.

La acción predeterminada de DispatcherUnhandledException es no capturar la excepción. Así que puedes ignorarlo, AppDomain.UnhandledException se activará a continuación.


Application.DispatcherUnhandledException manejará las excepciones lanzadas en el hilo principal de la IU en una aplicación WPF. AppDomain.UnhandledException manejará las excepciones lanzadas en cualquier hilo y nunca capturadas. Esto incluye los hilos que crea manualmente o el hilo principal en una aplicación de la Consola. WPF está detectando las excepciones en el subproceso de la interfaz de usuario, por lo que no las verá en AppDomain.UnhandledException .

También tenga en cuenta que las excepciones no controladas generalmente terminan el tiempo de ejecución, por lo que después de que se AppDomain.UnhandledException su programa se cerrará inmediatamente. En contraste, Application.DispatcherUnhandledException está detectando excepciones y permitirá que su programa continúe.