Tengo una aplicación WPF que genera varios subprocesos. Definí un controlador de eventos DispatcherUnhandledException en App.xaml.cs que muestra un mensaje de error detallado, y se llama a este controlador cada vez que el subproceso de la interfaz de usuario encuentra una excepción. El problema es con los hilos hijos: sus excepciones no manejadas nunca se manejan. ¿Cómo hago esto?Captura de excepciones no controladas en subprocesos secundarios en WPF
Código de ejemplo:
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show("detailed error message");
}
private void Application_Startup(object sender, StartupEventArgs e)
{
//...
//If an Exception is thrown here, it is handled
//...
Thread[] threads = new Thread[numThreads];
for(int i = 0; i < numThreads; i++)
{
threads[i] = new Thread(doWork);
threads[i].Start();
}
}
private void doWork()
{
//...
//Exception thrown here and is NOT handled
//...
}
Editar: Una vez que ocurre una excepción no controlada, quiero mostrar un mensaje de error con un seguimiento de la pila, y luego salir de la aplicación.
Consulte http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx para leer por qué esto solo debe usarse para registrar el error antes de salir. –
@Henk, ese es el mismo enlace que ya he publicado. Sin embargo, tiene razón, la excepción solo debe usarse con fines de registro. – Brandon
Brandon, OK, no revisé su enlace (-: pero se deduce que cada subproceso debe manejar sus propias excepciones. –