2012-07-04 5 views
9

Cuando una excepción no se detecta en una aplicación .NET, la máquina virtual muestra un mensaje de error al usuario. Me gustaría poder mostrar mi propio mensaje de error, sin tener que poner un bloque catch en el nivel superior de mi aplicación (porque eso hace que las excepciones no detectadas sean más aburridas).¿Cómo puedo anular el diálogo de excepción no capturado por defecto?

Ahora mismo muestro mi propio cuadro de diálogo de error en un detector de eventos AppDomain.UnhandledException, pero el diálogo creado con .NET aún aparece. También me gustaría evitar Environment.FailFast ya que eso pasaría por alto mis bloques finally (a los que todavía estoy un poco apegado).

+0

Esa es una característica del JIT. No estoy seguro de que haya una manera de modificarlo ... –

+0

Probablemente crearía una variable de configuración del modo de producción/modo de desarrollo para alternar entre ver su propio cuadro de diálogo (y captura) en el nivel superior y no verlo. También es una buena idea en general para la depuración ... –

+1

Definitivamente es posible, recordé que Red Gate ha hecho algo en este campo. Ver esta [imagen] (http://www.red-gate.com/products/dotnet-development/smartassembly/assets/images/error_reporting_dialog.png) y el producto relacionado [página] (http: //www.red-gate.com/es/products/dotnet-development/smartassembly.asp) gate.com/products/dotnet-development/smartassembly/learn-more/screenshots). No estoy seguro de si tienen una versión gratuita, pero lo han hecho, ¡así que debe haber una forma! – oleksii

Respuesta

0

¿Qué tal un patrón similar que está en WP7?

// Code to execute on Unhandled Exceptions 
    private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     // do stuff 
     if (System.Diagnostics.Debugger.IsAttached) 
     { 
      // An unhandled exception has occurred; break into the debugger 
      System.Diagnostics.Debugger.Break(); 
     } 
    } 
+0

No estoy seguro de cómo esto me permite mostrar un mensaje personalizado. – zneak

1

Windows Forms tiene un manejador de excepciones incorporada que por defecto detecta una excepción no controlada administrada cuando no hay ningún depurador, y la excepción se produce durante el procesamiento de mensajes de ventana, y jitDebugging = false en app.config. Luego muestra un diálogo al usuario final e impide la finalización de la aplicación.

Usted puede cambiar la configuración DbgJitDebugLaunchSetting registro bajo HKLM \ Software \ Microsoft \ .NetFramework. 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 DbgManagedDebugger clave de registro.

En Visual Studio, vaya a Herramientas> Opciones> Depuración> JIT a establecer esta clave a 0 ó 2. Sin embargo, un valor de 1 es por lo general lo que quiere en la máquina de un usuario final

(Consulte http://msdn.microsoft.com/en-us/library/2ac5yxx6(v=vs.90).aspx)

Cuestiones relacionadas