【发布时间】:2018-11-24 23:48:15
【问题描述】:
我想知道,将 WPF 控件绑定到并发集合是否安全,特别是围绕同样实现 INotifyCollectionChanged 的 System.Collections.Concurrent 集合之一的包装类?
我知道CollectionChanged 必须在 UI 线程上调用(并且没有索引参数)。但是,如果另一个线程在 UI 更新自身时操作源集合,会发生什么情况? WPF 是否只是优雅地忽略了这个问题(就像在许多其他地方一样)?
【问题讨论】:
-
绝对肯定,集合的枚举器必须是线程安全的,ConcurentBag 就是这种情况。幸运的是,wpf 带有 BindingOperations.EnableCollectionSynchronization,即使使用 ObservableCollection 或 List 也能解决这个问题。不可变集合也是一种选择
标签: wpf multithreading data-binding concurrent-collections