WPF DataBinding线程安全

ale*_*ull 3 data-binding wpf multithreading synchronization

我有一个TextBox绑定到一个属性,该属性在后台线程中以非常快的速率进行修改.WPF线程中的数据绑定是否安全?属性或TextBox中的数据是否会不同步?是否有必要(甚至可能)在参与数据绑定的属性上使用同步?

我理解,如果属性所在的类实现了INotifyPropertyChanged,则绑定框架会自动将UI更新封装到UI线程.但是,这是否仍然允许数据不同步?如果我理解正确,从一个线程写入并从另一个线程读取的变量应该通过synchronized ...是绑定异常的数据吗?

谢谢!!

Ree*_*sey 5

是的,在大多数情况下.绑定对于单个对象是线程安全的(因此对于您的字符串应该没问题).但是,绑定到集合不是线程安全的 - 并且仍然需要手动编组.如果控件绑定到集合,则无法在后台线程上更改集合.

我理解,如果属性所在的类实现了INotifyPropertyChanged,则绑定框架会自动将UI更新封装到UI线程.但是,这是否仍然允许数据不同步?

这应该不会失去同步,除非多个线程非常快速地写入变量(在这种情况下,它们都将阻塞,直到它们恢复同步,但是有一段时间线程将"等待"用户界面).编组同步发生,因此在绑定是最新的之前,线程不会接收值.这会降低您的处理速度,因为UI更新必须在后台线程可以继续之前发生.