Beschäftigte Unbehandelte Ausnahmen in Kindern Themen in WPF
-
07-07-2019 - |
Frage
Ich habe eine WPF-Anwendung, die mehrere Threads dreht ab. Ich habe einen DispatcherUnhandledException Event-Handler in App.xaml.cs definiert, die eine detaillierte Fehlermeldung angezeigt wird, und diese Prozedur wird jedesmal, wenn der UI-Thread trifft eine Ausnahme genannt. Das Problem ist, mit dem Kind-Themen: die nicht behandelte Ausnahmen nie behandelt bekommen. Wie mache ich das?
Beispielcode:
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:. Sobald eine nicht behandelte Ausnahme auftritt, möchte ich mit einem Stack-Trace eine Fehlermeldung angezeigt wird, und dann die Anwendung beenden
Lösung
Versuchen Sie, das Einhaken AppDomain.CurrentDomain.UnhandledException Veranstaltung auch.
Andere Tipps
Das ist von Entwurf, Sie einen try / catch auf der obersten Ebene von DoWork verwenden sollten. Einige Threading-Modelle für diese gerecht zu werden, werfen Sie einen Blick auf die Backgroundworker für ein Beispiel.
Die .NET-4 Task-Klasse bietet eine schöne Schnittstelle für dieses Problem. Bis dahin müssen Sie davon kümmern sich selbst, oder verwenden Sie die BGW oder IAsyncResult Modelle.