no controlada comportamiento de excepción en un 1.x .NET Windows Forms depende de:
- El tipo de hilo que lanzó la excepción
- si ocurrió durante el procesamiento de mensajes ventana
- Ya sea un depurador se adjuntó al proceso
- el ajuste
- la bandera jitDebugging en app.config
registro DbgJitDebugLaunchSetting 210
- Ya sea que pesaban más que las de Windows Forms gestor de excepciones
- Ya sea que usted manejó evento de excepción del CLR
- La fase de la luna
El comportamiento predeterminado de excepciones no controladas es:
- Si el se produce una excepción en el hilo principal al bombear mensajes de ventana, es interceptado por el manejador de excepciones de Windows Forms.
- Si la excepción ocurre en el hilo principal al bombear mensajes de ventana, terminará el proceso de la aplicación a menos que sea interceptado por el manejador de excepciones de Windows Forms.
- Si la excepción se produce en un hilo manual, de subprocesos o de finalizador, se lo traga el CLR.
Los puntos de contacto para una excepción no controlada son:
- Windows Forms gestor de excepciones.
- El modificador de registro JIT-debug DbgJitDebugLaunchSetting.
- El evento de excepción CLR no controlada.
El formulario de Windows integrada en el manejo de excepciones hace lo siguiente de forma predeterminada:
- detecta una excepción no controlada cuando:
- excepción es el hilo principal y ningún depurador asociado.
- se produce una excepción durante el procesamiento del mensaje de la ventana.
- jitDebugging = false en App.Config.
- Muestra el diálogo al usuario y evita la finalización de la aplicación.
Puede desactivar este último comportamiento configurando jitDebugging = true en App.Config. Pero recuerda que esta puede ser tu última oportunidad para detener la finalización de la aplicación. Así que el siguiente paso para capturar una excepción no controlada es el registro para el evento Application.ThreadException, por ejemplo .:
Application.ThreadException += new
Threading.ThreadExceptionHandler(CatchFormsExceptions);
observe la configuración DbgJitDebugLaunchSetting en HKEY_LOCAL_MACHINE \ Software.NetFramework registro. Esto tiene uno de los tres valores que conozco:
- 0: muestra el cuadro de diálogo del usuario que pregunta "depurar o terminar".
- 1: permite la excepción a través de CLR para tratar.
- 2: inicia el depurador especificado en la clave de registro DbgManagedDebugger.
En Visual Studio, vaya al menú Herramientas → Opciones → depuración → JIT a establecer esta clave a 0 ó 2. Sin embargo, un valor de 1 es generalmente mejor con el usuario final de máquina. Tenga en cuenta que esta clave de registro se actúa antes del evento de excepción CLR no controlada.
Este último evento es su última oportunidad para registrar una excepción no controlada. Se dispara antes de que se hayan ejecutado los bloques Finally. Puede interceptar este evento de la siguiente manera:
AppDomain.CurrentDomain.UnhandledException += new
System.UnhandledExceptionEventHandler(CatchClrExceptions);