我一直在努力掌握这个概念,即使经过多次实验,我仍然无法弄清楚 WPF 中的 ObservableCollections 和使用 BindingOperations.EnableCollectionSynchronization 的最佳实践是什么。
如果我有一个带有可观察集合的视图模型,并且我使用锁在其上启用集合同步,如下所示:
m_obsverableCollection = new ObservableCollection<..>;
BindingOperations.EnableCollectionSynchronization(m_obsverableCollection,
m_obsverableCollectionLock);
这是否意味着对该可观察集合的每次修改和枚举都将:
- 使用 m_obsverableCollectionLock 自动锁定集合?
- Marshall 在创建集合的线程上进行所有修改?
- Marshall 对调用绑定操作的线程进行所有修改?
使用 BindingOperations.EnableCollectionSynchronization 时,我是否需要明确地进行任何类型的锁定?
产生这一切的问题是,即使在使用 BindingOperations.EnableCollectionSynchronization 并使用我传递给该方法的同一锁锁定项目之后,我偶尔也会收到“这种类型的 CollectionView 不支持从不同于调度线程。” 例外