Was sind die Unterschiede zwischen Dispatcher.CurrentDispatcher
(in System.Windows.Threading
) und Application.Current.Dispatcher
(in System.Windows
)?
Mein Bauch sagt mir, dass sich Application.Current.Dispatcher
das nie ändern wird und für alle Threads in der aktuellen Anwendung global ist, während abhängig vom Thread, von dem es aufgerufen wurde , Dispatcher.CurrentDispatcher
möglicherweise eine neue Instanz erstellt wird Dispatcher
.
Ist das korrekt?
Wenn ja, ist der Zweck in Dispatcher.CurrentDispatcher
erster Linie für die Multithread-Benutzeroberfläche?
quelle
Invoke
und Freunde "verpacken" normalerweise (Marschall, wenn Sie es vorziehen) einen Methodenaufruf in eine Win32-Nachricht und stellen ihn in eine Nachrichtenwarteschlange, aus der eine Nachrichtenschleife (die Dispatcher-Schleife) sie schließlich extrahiert und den Aufruf ausführt. Da es keine Dispatcher-Schleife gibt (wenn Sie in dieser Schleife wären, würde Ihr Code nicht ausgeführt), würde der Aufruf niemals tatsächlich stattfinden. Ich gehe also davon aus, dassInvoke
zunächst geprüft wird, ob Sie sich bereitsCurrentDispatcher
als Optimierung im Thread befinden und ob Sie den Aufruf vor Ort ausführen, anstatt ihn zu marshallen. Sie können dies überprüfen, indem Sie überprüfenThread.ManagedThreadId
.Einfach gesagt...
Dispatcher.CurrentDispatcher
Ruft den Dispatcher für den aktuellen Thread ab . Wenn Sie also über einen Hintergrundprozess nach dem Dispatcher des UI-Threads suchen, verwenden Sie diesen nicht.Application.Current.Dispatcher
gibt Ihnen immer den Dispatcher des UI-Threads, da dies der Thread ist, der die einzige Anwendungsinstanz hochfährt.quelle
Das ist richtig, das
Application.Current.Dispatcher
ist eine Instanzeigenschaft der Anwendung, die bei der Erstellung als Dispatcher des aktuellen Threads zugewiesen wird. Und wie die Dokumentation vonDispatcher.CurrentDispatcher
zeigt:Möglicherweise habe ich keine Verwendung gefunden, um den Dispatcher eines Hintergrund-Threads zu erhalten, da Sie normalerweise keine dazugehörigen UI-Elemente haben, zu denen Sie möglicherweise Operationen versenden möchten.
quelle