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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top