Ich habe die folgende Methode in einer Basisklasse, die System.ComponentModel.INotifyPropertyChanged implementiert:
%Vor%Gelegentlich wurde die folgende Ausnahme in der Datei protokolliert:
Typ: System.InvalidOperationException, mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 Nachricht: Diese Operation kann nicht ausgeführt werden, während die Dispatcher-Verarbeitung angehalten ist. Quelle: WindowsBase Hilfe-Link: Daten: System.Collections.ListDictionaryInternal TargetSite: Void PushFrame (System.Windows.Threading.DispatcherFrame) Stapelüberwachung: bei System.Windows.Threading.Dispatcher.PushFrame (DispatcherFrame-Frame) bei System.Windows.Threading.DispatcherOperation.Wait (TimeSpan-Timeout) at System.Windows.Threading.Dispatcher.InvokeImpl (DispatcherPriority-Priorität, TimeSpan-Timeout, Delegate-Methode, Object-Argumente, Boolean isSingleParameter) at System.Windows.Threading.Dispatcher.Invoke (DispatcherPriority-Priorität, Delegate-Methode) bei OCC600.Infrastructure.Dictionary.BusinessEntities.Observable.RaisePropertyChangedEventSynchronous (String propertyName)
Wenn ich Dispatcher.BeginInvoke zum Aktualisieren der Benutzeroberfläche verwende, erhalte ich diese Ausnahmen nicht. Aber ich habe herausgefunden, dass das Ausführen von Updates mit BeginInvoke nicht zuverlässig ist, da diese Änderungen manchmal nicht auf der Benutzeroberfläche wiedergegeben werden.
Wie löse ich das?
Ich nehme an, dass Sie sich in einem Hintergrundthread befinden und versuchen, Ihr PropertyChanged-Ereignis im UI-Thread zu erhöhen. Ich denke, WPF behandelt die Thread-Änderung für Sie; Du solltest das nicht tun müssen.
Hier ist ein Code, den ich geschrieben habe. XAML:
%Vor%
C #:
%Vor%