Ich füge nur hinzu, warum und wann Invoke() zu verwenden ist.
Sowohl Invoke() als auch BeginInvoke() übermitteln den von Ihnen angegebenen Code an den Dispatcher-Thread.
Aber im Gegensatz zu BeginInvoke() hält Invoke() Ihren Thread an, bis der Dispatcher Ihren Code ausführt. Sie sollten Invoke() verwenden, wenn Sie eine asynchrone Operation unterbrechen müssen, bis der Benutzer eine Rückmeldung gegeben hat.
Sie könnten beispielsweise Invoke() aufrufen, um einen Codeausschnitt auszuführen, der ein Dialogfeld "OK/Abbrechen" anzeigt. Nachdem der Benutzer auf eine Schaltfläche geklickt hat und der übertragene Code abgeschlossen ist, kehrt die invoke()-Methode zurück, und Sie können auf die Antwort des Benutzers reagieren.
Siehe Pro WPF in C# Kapitel 31