¿Es posible intentar / atrapar todo el programa de C #?
-
05-07-2019 - |
Pregunta
Un programa de C # es invocado por:
Application.Run (new formClass ());
Me gustaría probar / capturar todo el asunto para atrapar cualquier excepción no detectada. Cuando lo coloco alrededor de este método de ejecución, las excepciones no se detectan; el control solo se devuelve aquí cuando el programa termina después de una excepción no detectada.
¿Dónde puedo poner try / catch para cubrir todo el programa? Gracias!
Solución
Para detectar las excepciones no controladas de Windows Form, conecte el
AppDomain.UnhandledException
y Application.ThreadException
eventos.
De interés: Errores inesperados en aplicaciones administradas
Otros consejos
Básicamente, no puede capturar todas las excepciones cuando usa el proceso de alojamiento CLR predeterminado. Período. Esto se debe a que AppDomain.UnhandledException
el evento es solo una notificación, no puede manejar la excepción (lo que significa que no puede evitar que la aplicación finalice después de procesar la notificación).
Sin embargo, puede capturar y manejar todas las excepciones en el subproceso de la interfaz de usuario de una aplicación WinForms utilizando su Application.ThreadException
(y controlar el comportamiento a través de UnhandledExceptionMode
). Este controlador no detectará otros subprocesos que produzcan una excepción.
En general, no es una buena idea tratar de manejar todas las excepciones. Usted puede, sin embargo, utilizar el
AppDomain.UnhandledException
para registrar el error y / o realizar tareas de limpieza importantes (por ejemplo, cerrar una base de datos basada en archivos o lo que sea).