ObservableCollection
von Hintergrundthreads in .NETDas direkte Ändern eines ObservableCollection
aus einem Arbeitsthread in .NET führt häufig zu Ausnahmen. Dies liegt daran, dass ObservableCollection
nicht threadsicher ist. Wenn mehrere Threads gleichzeitig darauf zugreifen, kann dies zu unvorhersehbarem Verhalten führen.
.NET 4.5 und spätere Versionen bieten eine praktische Lösung mit BindingOperations.EnableCollectionSynchronization
. Diese Methode vereinfacht die Thread-Synchronisierung für UI-Updates:
BindingOperations.EnableCollectionSynchronization(myCollection);
Diese einzelne Zeile erreicht:
ObservableCollection
( myCollection
) mit dem UI-Thread und stellt sicher, dass CollectionChanged
Ereignisse im UI-Thread verarbeitet werden.Während BindingOperations.EnableCollectionSynchronization
die UI-Thread-Synchronisierung übernimmt, denken Sie daran, dass ObservableCollection
grundsätzlich nicht threadsicher bleibt. Für eine robuste Thread-Sicherheit verwenden Sie immer eine Sperre, wenn Sie die Sammlung direkt aus Hintergrund-Threads ändern:
<code class="language-csharp">lock (myCollection) { // Modify myCollection here (e.g., Add, Remove, etc.) }</code>
Durch die Kombination von BindingOperations.EnableCollectionSynchronization
mit geeigneter Sperrung können Sie Ihre ObservableCollection
sicher und effizient über Arbeitsthreads aktualisieren, ohne die Integrität des UI-Threads zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine Beobachtung von einem Worker -Thread in .NET sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!