c# - manejo - que es control de excepciones
Captura de excepciones no controladas en subprocesos secundarios en WPF (2)
Tengo una aplicación WPF que se divide en varios hilos. He definido un controlador de eventos DispatcherUnhandledException en App.xaml.cs que muestra un mensaje de error detallado, y este controlador se llama cada vez que el subproceso de la interfaz de usuario encuentra una excepción. El problema está en los subprocesos secundarios: sus excepciones no manejadas nunca se manejan. ¿Cómo hago esto?
Código de muestra:
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
//...
}
Edición: una vez que se produce una excepción no controlada, quiero mostrar un mensaje de error con un seguimiento de pila y luego salir de la aplicación.
Esto es por diseño, debe usar un try / catch en el nivel superior de DoWork. Algunos modelos de subprocesos se adaptan a esto, consulte el Backgroundworker para ver un ejemplo.
La clase de tareas .NET 4 proporciona una interfaz agradable para este problema. Hasta entonces, deberá cuidarlo usted mismo o usar los modelos BGW o IAsyncResult.
Intente conectar también al evento AppDomain.CurrentDomain.UnhandledException .