.NET 中的线程安全 ObservableCollection 更新
如果在 UI 线程之外尝试进行修改,则使用 ObservableCollection
对象和后台线程通常会导致异常。 本文解释了原因并提供了解决方案。
挑战:单线程性质
ObservableCollection
本质上是单线程的。 它们只能从创建它们的线程(通常是 UI 线程)进行修改。 尝试从工作线程进行更新会导致异常。
.NET 4.5 及更高版本的解决方案
.NET 4.5 及更高版本提供 BindingOperations.EnableCollectionSynchronization
用于线程安全访问。此方法处理同步并将 CollectionChanged
事件分派到 UI 线程。
实施步骤:
在 UI 线程上: 调用 BindingOperations.EnableCollectionSynchronization(yourObservableCollection, new object())
。 第二个参数是一个锁对象;使用 new object()
创建一个简单的锁。
在工作线程内:使用传递给的相同EnableCollectionSynchronization
锁对象。 在修改 ObservableCollection
之前获取锁,然后释放它。 这保证了线程安全。
执行更新:在锁定期间对 ObservableCollection
进行更改。
此方法利用框架的内置同步,为从后台线程更新 ObservableCollection
提供干净且高效的解决方案。 请记住始终释放锁以防止死锁。
以上是如何从.NET中的Worker线程更新观测值?的详细内容。更多信息请关注PHP中文网其他相关文章!