Ho un'applicazione WPF che gira diversi thread. Ho definito un gestore di eventi DispatcherUnhandledException in App.xaml.cs che visualizza un messaggio di errore dettagliato e questo gestore viene chiamato ogni volta che il thread dell'interfaccia utente rileva un'eccezione. Il problema riguarda i thread secondari: le loro eccezioni non gestite non vengono mai gestite. Come faccio a fare questo?Catching Eccezioni non gestite nei thread secondari in WPF
codice di esempio:
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
//...
}
Edit: Una volta che si verifica un'eccezione non gestita, voglio visualizzare un messaggio di errore con una traccia dello stack, e poi uscire dall'applicazione.
Vedere http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx per capire perché questo deve essere utilizzato solo per registrare l'errore prima di uscire. –
@Henk, questo è lo stesso link che ho già postato. Hai ragione, tuttavia, l'eccezione dovrebbe essere utilizzata solo per scopi di registrazione. – Brandon
Brandon, OK, non ho controllato il tuo link (-: Ma ne consegue che ogni Thread dovrebbe gestire le proprie eccezioni. –