En aplicaciones que utilizan Windows Forms, las excepciones no controladas en el hilo principal de la aplicación hacen que el evento Application.ThreadException
a ser elevado. Si se maneja este evento, el comportamiento predeterminado es que la excepción no controlada no finaliza la aplicación, aunque la aplicación se deja en un estado desconocido. En ese caso, el evento UnhandledException
no se genera. Este comportamiento se puede cambiar utilizando el archivo de configuración de la aplicación o mediante el método Application.SetUnhandledExceptionMode
para cambiar el modo a UnhandledExceptionMode.ThrowException
antes de conectar el controlador de eventos ThreadException
. Esto se aplica solo al hilo principal de la aplicación. El evento UnhandledException
se genera para las excepciones no controladas lanzadas en otros subprocesos.
A partir de Visual Studio 2005, el Visual Basic marco de aplicación proporciona otro caso de excepciones no controladas en el hilo principal de la aplicación - WindowsFormsApplicationBase.UnhandledException
. Este evento tiene un objeto de argumentos de evento con el mismo nombre que el objeto de argumentos de evento utilizado por AppDomain.UnhandledException, pero con diferentes propiedades. En particular, este objeto de argumentos de evento tiene una propiedad ExitApplication
que permite que la aplicación continúe ejecutándose, ignorando la excepción no controlada (y dejando la aplicación en un estado desconocido). En ese caso, el evento AppDomain.UnhandledException no se genera.
Application.ThreadException
pueden ser capturados y la aplicación podría continuar (en general, no es una gran idea, sino por la aplicación como correr periódicamente algunas acciones esta es una buena solución).
Para detectar excepciones que se producen en subprocesos no creados y propiedad de Windows Forms, use AppDomain.UnhandledException
. Permite a la aplicación registrar información sobre la excepción antes de que el controlador predeterminado del sistema informe la excepción al usuario y finalice la aplicación.
El manejo de esta excepción no impide que la aplicación finalice.
El máximo que se puede hacer (los datos del programa pueden dañarse cuando no se manejan las excepciones) está guardando los datos del programa para una recuperación posterior. Después de eso, el dominio de la aplicación se descarga y la aplicación finaliza.
A partir de la .NET 4, este evento no se eleva para las excepciones que corrompen el estado del proceso, tales como desbordamientos de pila o violaciónes de acceso, a menos que el controlador de eventos es la seguridad crítica y tiene el atributo HandleProcessCorruptedStateExceptionsAttribute
.
Para obtener más información, consulte MSDN.
Y cómo evitar que la aplicación WinForms falle en la aparición de 'Application.ThreadException'. Planteé una pregunta para este [[aquí] (http://stackoverflow.com/questions/23153287/suppressing-application-threadexception-and-appdomain-currentdomain-unhandledexc)] con mi pequeño código C#. – Mahesha999
Siempre lo leo como excepción de subproceso de aplicación, dado que winforms está vinculado a un solo subproceso. – Gusdor