Así es como lo manejo. Esto no es bonito, pero tenga en cuenta que este tipo de error nunca debe pasar la depuración como un desarrollador. Esos errores deberían resolverse por mucho tiempo antes de que vayas a producción (así que está bien que esto no sea bonito). En el proyecto de inicio, en el código de App.xaml (App.xaml.cs) detrás, coloco el siguiente código.
- OnStartup, crear un controlador de eventos DispatcherUnhandledException
- En el controlador, utilice un cuadro de mensaje para mostrar el mensaje. Tenga en cuenta que es probable que la ventana de inicio aún no se haya creado, así que no intente ponerla en una ventana.
- e.Manipule el error
- Me gusta ver cuando hay errores internos adicionales, así que sigo llamando a la ventana de visualización hasta que el error interno sea nulo.
No estoy seguro de por qué los caracteres especiales del bloque de código no están formateando esto correctamente. Lo siento por eso.
protected override void OnStartup(StartupEventArgs e)
{
// define application exception handler
Application.Current.DispatcherUnhandledException +=
AppDispatcherUnhandledException;
// defer other startup processing to base class
base.OnStartup(e);
}
private void AppDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
runException(e.Exception);
e.Handled = true;
}
void runException(Exception ex)
{
MessageBox.Show(
String.Format(
"{0} Error: {1}\r\n\r\n{2}",
ex.Source, ex.Message, ex.StackTrace,
"Initialize Error",
MessageBoxButton.OK,
MessageBoxImage.Error));
if (ex.InnerException != null)
{
runException(ex.InnerException);
}
}
Excepto que el código en la lista arroja la excepción en el hilo principal de la interfaz de usuario. – svick
degradado ... porque en el ejemplo se lanza la excepción en el hilo principal –