Es wurde viel darüber diskutiert, wie ein UI-Thread von einem Arbeits-Thread aus aufgerufen werden kann, und wir wissen, warum man `BeginInvoke()` anstelle von `Invoke()` verwenden sollte. Ich habe kürzlich diese Frage veröffentlicht und nach einigen Recherchen festgestellt, dass es zumindest drei verschiedene Arten (intern können sie gleich sein) gibt, etwas auf dem UI-Thread (asynchron) aufzurufen.
Control.BeginInvoke()
- Verwendung der
SynchronizatoinContext
Klasse - Verwenden von
Dispatcher.BeginInvoke(Priorität..)
Kann mir jemand sagen, welcher Weg zuverlässig ist, um eine Methode asynchron auf dem UI-Thread auszuführen? Irgendwelche Erfahrungen? Ich sehe, dass `Dispatcher.BeginInvoke` eine Prioritätskomponente hat, macht das es zuverlässiger?
Kontext:
Wir verwenden `someControl.BeginInvoke()`, aber manchmal (leider nur in der Produktionsumgebung für Endbenutzer) wird der an `BeginInvoke` übergebene Delegat nie ausgeführt, was mich glauben lässt, dass die Post Nachricht, die er erstellt, verloren geht. Wir möchten einen zuverlässigen Weg finden, um mit dem UI-Thread zu kommunizieren. `control.Invoke()` hängt manchmal die UI auf, also wollen wir auch dort nicht hingehen.
0 Stimmen
Verwechseln Sie WinForms nicht mit WPF.
0 Stimmen
Ich habe ein ähnliches Problem...Hast du zufällig das Problem beheben können?
0 Stimmen
Gleiche hier, irgendein Update?