Warum werden Ausnahmen von WPF Dispatcher.Invoke nicht weitergegeben?

Hier ist mein hypothetisches Beispiel. Ich habe ein sehr einfaches WPF-Fenster mit einer Schaltfläche. Das Button.Click-Ereignis verfügt über einen Handler, der folgendermaßen funktioniert.

Action doit = () =>
{
    Action error = () => { throw new InvalidOperationException("test"); };

    try {
        this.Dispatcher.Invoke(error, DispatcherPriority.Normal);
    } catch (Exception ex) {
        System.Diagnostics.Trace.WriteLine(ex);
        throw;
    }
};
doit.BeginInvoke(null, null);

Ich würde erwarten, dass die Ausnahme vom @ abgefangen und notiert wirTrace.WriteLine Anruf. Stattdessen wird keine Ausnahme abgefangen und die Anwendung bricht ab.

Weiß jemand eine mögliche Erklärung dafür? Und welche Problemumgehung schlagen Sie vor, um die vom von @ aufgerufenen Delegaten ausgelösten Ausnahmen abzufangeDispatcher.Invoke?

Update 1: Ich habe ein @ gesetthrow im Ausnahmebehandlungscode. Ich möchte die Ausnahme nicht wirklich ignorieren. Der springende Punkt meiner Frage ist, richtig damit umzugehen. Das Problem ist, dass der Code zur Ausnahmebehandlung niemals ausgeführt wird.

Denken Sie daran, dass dies ein hypothetisches Beispiel ist. Mein richtiger Code sieht nicht so aus. Angenommen, ich kann den Code in der aufzurufenden Methode nicht ändern.

Update 2: Betrachten Sie dieses ähnliche Beispiel. Anstelle eines WPF-Fensters habe ich ein Windows Forms-Fenster. Es hat eine Schaltfläche mit dem fast genau gleichen Handler. Der einzige Unterschied besteht im Aufrufcode. Es geht so

this.Invoke(error);

In Windows Forms wird der Code für die Ausnahmebehandlung ausgeführt. Warum der Unterschied?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage