Capturar excepciones de aplicaciones en una aplicación Windows Forms

¿Hay alguna forma de capturar las expectativas lanzadas por cualquier parte del código? Me gustaría detectar excepciones y manejarlas de manera similar en lugar de escribir bloques de captura de prueba para cada funcionalidad.

En las aplicaciones de Windows Forms, cuando se lanza una excepción a alguna parte de la aplicación (en el hilo principal o durante las llamadas asincrónicas), puede atraparla registrándose para el evento ThreadException en la Aplicación. De esta forma, puede tratar todas las excepciones de la misma manera.

Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod); private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t) { //Exception handling... } 

Creo que esto es lo más cercano posible a lo que estás buscando dentro de una aplicación de formulario de victoria.

http://msdn.microsoft.com/en-us/library/ms157905.aspx

 // Add the event handler for handling UI thread exceptions to the event. Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException); // Set the unhandled exception mode to force all Windows Forms errors to go through // our handler. Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); // Add the event handler for handling non-UI thread exceptions to the event. AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

Sin hacer todos estos pasos, corre el riesgo de que algunas excepciones no sean controladas.

La respuesta obvia es poner un controlador de excepción en la parte superior de su cadena de ejecución.

 [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new YourTopLevelForm()); } catch { //Some last resort handler unware of the context of the actual exception } } 

Esto captará cualquier excepción que ocurra en su hilo principal de GUI. Si también desea capturar globalmente las excepciones que ocurren en todos los hilos, puede suscribirse al evento AppDomain.UnhandledException y manejar allí.

 Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod) private static void MyCommonExceptionHandlingMethod( object sender, ThreadExceptionEventArgs t) { //Exception handling... } 

Código copiado de la respuesta de Charith J

Ahora en el consejo …

Estas opciones solo se deben utilizar como último recurso, por ejemplo, si desea suprimir excepciones accidentalmente no detectadas de la presentación al usuario. Debería estar atrapando antes siempre que sea posible, cuando sepa algo sobre el contexto de la excepción. Aún mejor, es posible que puedas hacer algo sobre el problema.

El manejo estructurado de excepciones puede parecer una sobrecarga innecesaria con la cual se puede trabajar con un catch all, pero existe porque este no es el caso. Además, este trabajo debe hacerse a medida que se escribe el código, cuando el desarrollador tiene la lógica fresca en su mente. No seas flojo y deja este trabajo para más adelante o para que un desarrollador más profesional lo elija.

Disculpas si ya sabes y haz esto.

Ver AppDomain.UnhandledException y Application.ThreadException .

Puede suscribirse al evento AppDomain.UnhandledException