Was ist ein allgemeines reales Leben für Dispatcher.DisableProcessing in WPF? Kann ich es verwenden, um Rendering und Layout auszusetzen, wenn ich eine komplexe Benutzeroberfläche in Code erstelle?
Gemäß MSDN:
Die Deaktivierung der Dispatcher-Verarbeitung ist ein fortgeschrittene Methode, die dazu gedacht ist eliminieren Sie die Chance auf nichts anderes Reentranz.
Sie arbeiten also an demselben Thread, auf dem Dispatcher
ausgeführt wird, aber Sie möchten nicht, dass Ereignisse verarbeitet werden, während Sie diese Aufgabe ausführen. Ich denke, der wirklich relevante Punkt ist:
Die Auswirkungen der Deaktivierung der Verarbeitung sind wie folgt:
%Vor%
Wenn ich das richtig verstanden habe, bedeutet das, dass Sie die Dispatcher-Pumpen-Ereignisse sicher sperren können (was zu ungewollter Wiedereintritt führen kann).
Ich kann einen Fall teilen, den wir kürzlich kennen gelernt haben. Es stammt aus dem PropertyChangedEventManager
, das in WPF für PropertyChanged
Event-Handler-Management verwendet wird. Wir haben den Stack erfasst, wenn die GUI tot ist:
Das Stapelmuster hier zeigt, dass es ein Wiedereintritt ist:
%Vor%% PropertyChangedEventManager
verwendet ReaderWriterLock
, wenn die Bindung geändert wurde, daher müssen wir DisableProcessing
verwenden, wenn Eigenschaften im Ansichtsmodell geändert werden, um das Problem zu vermeiden.
Tags und Links wpf multithreading dispatcher