2010-07-09 15 views

Respuesta

11

Application.DispatcherUnhandledException gestionar las excepciones lanzadas en el hilo principal interfaz de usuario en una aplicación de WPF. AppDomain.UnhandledException manejará excepciones lanzadas en cualquier hilo y nunca atrapadas. Esto incluye los hilos que crea manualmente o el hilo principal en una aplicación de consola. WPF está capturando las excepciones en el subproceso de UI, por lo que no verá ésos en AppDomain.UnhandledException.

También tenga en cuenta que las excepciones no controladas normalmente terminan el tiempo de ejecución, por lo que después AppDomain.UnhandledException se eleva su programa hará salir inmediatamente. Por el contrario, Application.DispatcherUnhandledException está capturando excepciones y permitirá que su programa continúe.

+7

En realidad, cuando Application.DispatcherUnhandledException no se utiliza, esas excepciones se mostrarán en AppDomain.UnhandledException, y la aplicación se cerrará inmediatamente. – stijn

+0

La aplicación no existirá si se captura y maneja la excepción.Tanto la respuesta como el comentario implican que de cualquier forma la aplicación saldrá, lo cual es incorrecto. – vikp

2

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

dice:

"DispatcherUnhandledException se eleva mediante una solicitud para cada una excepción que es controlada por el código que se ejecuta en el hilo principal interfaz de usuario."

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

dice:

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

Así es DispatcherUnhandledException excepciones hilo de interfaz de usuario, y AppDomain.UnhandledException es para todo lo demás.

Espero que ayude!

8

DispatcherUnhandledException se eleva solamente por el hilo de interfaz de usuario y sólo si una excepción se elevó durante la ejecución de un evento. Hay un poco de tradición para manejar este tipo de excepciones, especialmente, Windows Forms lo tiene también con Application.ThreadException (mal nombrado, nada que ver con los hilos).

La razón es que hay una probabilidad menor de manejar la excepción y mantener vivo el programa desde los controladores de eventos de interfaz de usuario no siempre mutan el estado de programa demasiado drásticamente. Esto requiere una gran cantidad de ilusiones. Windows Forms lleva esto al extremo, muestra un ThreadExceptionDialog que tiene un botón Continuar, lo que permite al usuario ignorar la excepción. WPF no hace eso, tendría que escribir un diálogo como ese usted mismo. Por eso el evento está ahí.

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

Cuestiones relacionadas