从后台线程更新绑定属性

时间:2012-01-24 21:49:17

标签: c# wpf multithreading data-binding

我有一个绑定到ViewModel属性的WPF控件。令我惊讶的是(因为这似乎不是WPF的广告宣传功能),从后台线程更改绑定属性似乎没有问题。我的UI更新没有例外。为什么是这样?从后台线程更新绑定属性或任何其他限制是否存在任何性能问题?

3 个答案:

答案 0 :(得分:2)

WPF会自动确保在主线程上更新绑定。

没有性能损失。如果有什么事情,最好在后台线程上进行属性更新。调度主线程的更新将增加在那里完成的工作量。您将更新View和ViewModel,而不仅仅是View。差异通常应该可以忽略不计,但如果很多更新快速发生,那么可能会导致UI的响应速度降低更快。

答案 1 :(得分:2)

这是因为WPF负责将绑定数据编组到UI线程。 据我所知,这仅适用于标量数据。对于集合,您必须注意在非UI和UI线程之间正确管理它。

没有明显的开销,因为最后它应该做与多线程相同的事情(可能采用稍微优化的方式)。

答案 2 :(得分:2)

取决于。

它只是“自动”执行此操作(IIRC)来绑定实现INotifyPropertyChanged的属性。 DependencyProperties和DependencyObjects具有线程关联性,如果您尝试从另一个线程更新它们,则会抛出。

Binding类有一个名为IsAsync的属性,它在某些特殊情况下帮助从另一个线程更新属性,以便更新不会阻止UI。在你做之前,你并不需要它。