WPF 中 ObservableCollection 的线程安全修改
在 WPF 中使用 ObservableCollection
时,维护线程安全至关重要。在没有适当同步的情况下尝试从工作线程修改 ObservableCollection
会导致异常。
要从工作线程修改 ObservableCollection
,必须在 UI 线程上使用 BindingOperations.EnableCollectionSynchronization
方法。此方法执行以下步骤:
CollectionChanged
事件的调度程序,确保它们在 UI 线程上处理。正确处理线程安全集合的步骤:
lock
语句还是自定义同步机制。EnableCollectionSynchronization
的适当重载。使用 lock 语句的示例:
<code class="language-csharp">public class ViewModel { private readonly ObservableCollection<Item> _items; public ViewModel() { _items = new ObservableCollection<Item>(); BindingOperations.EnableCollectionSynchronization(_items, new object()); } public void UpdateCollection() { var worker = new Thread(() => { lock (_items) { _items.Add(new Item()); } }); worker.Start(); } }</code>
通过实现这些步骤,您可以安全地从工作线程更新 ObservableCollection
,而不会影响数据完整性。
以上是如何确保WPF中ObservableCollections的线程安全修改?的详细内容。更多信息请关注PHP中文网其他相关文章!