正在从后台线程更新绑定属性

本文关键字:更新 绑定 属性 线程 后台 | 更新日期: 2023-09-27 18:21:31

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

正在从后台线程更新绑定属性

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

没有表演上的成功。如果有什么不同的话,最好在后台线程上进行属性更新。将更新调度到主线程将增加在那里完成的工作量。您将同时更新视图和ViewModel,而不仅仅是视图。这种差异通常可以忽略不计,但如果大量更新发生得很快,则可能会导致UI的响应能力更快下降。

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

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

这取决于情况。

它仅对实现INotifyPropertyChanged的属性的绑定"自动"执行此操作(IIRC)。DependencyProperty和DependencyObjects具有线程相关性,如果您尝试从另一个线程更新它们,就会抛出。

Binding类有一个名为IsAsync的属性,在某些特殊情况下,当从另一个线程更新属性时,它会有所帮助,这样更新就不会阻塞UI。除非你真的需要它,否则你并不真正需要它。