从后台线程更新绑定属性

4

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


这就是为什么在可能的情况下,绑定优先于使用调度程序的一个原因。 - H.B.
很可能是在主 UI 线程上调用 Invoke 来改变 UI。 - Epirocks
3个回答

2

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

这不会影响性能。如果有什么问题,最好在后台线程上执行属性更新。将更新调度到主线程会增加在那里执行的工作量。您将同时更新View和ViewModel,而不仅仅是View。通常差异可以忽略不计,但如果频繁发生许多更新,则可能导致UI的响应速度更快地降低。


2
这是因为 WPF 负责将绑定的数据传递到 UI 线程。据我所知,这仅适用于标量数据。对于集合,您必须在非 UI 和 UI 线程之间正确管理它。
没有明显的开销,因为最终它应该做多线程处理所做的相同工作(也许以稍微更优化的方式)。

2

这要看情况。

只有实现了INotifyPropertyChanged接口的属性绑定才会自动更新。DependencyProperties和DependencyObjects具有线程关联性,如果你试图从另一个线程更新它们,它们会抛出异常。

Binding类有一个名为IsAsync的属性,在某些特殊情况下有助于从另一个线程更新属性,以避免阻塞UI。在不需要它之前,你不需要使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接