WPF数据绑定线程安全?

WPF数据绑定线程安全?,wpf,multithreading,data-binding,Wpf,Multithreading,Data Binding,假设我有一个数据绑定到的对象,它实现了INotifyPropertyChanged,以在值发生更改时通知GUI 如果我从不同于GUI线程的线程触发此事件,wpf将如何运行 它会确保从内存而不是cpu缓存获取属性值吗 或多或少,我在问wpf是否在包含属性的对象上锁定了()。实际上,它似乎按照预期工作,并且似乎是线程安全的(没有看到任何奇怪的情况发生或由于在后台线程上更新而导致的异常)。我相信它会在需要时调用UI线程,但我对其内部结构不太熟悉。由INotifyPropertyChanged引发的值更

假设我有一个数据绑定到的对象,它实现了INotifyPropertyChanged,以在值发生更改时通知GUI

如果我从不同于GUI线程的线程触发此事件,wpf将如何运行

它会确保从内存而不是cpu缓存获取属性值吗


或多或少,我在问wpf是否在包含属性的对象上锁定了()。

实际上,它似乎按照预期工作,并且似乎是线程安全的(没有看到任何奇怪的情况发生或由于在后台线程上更新而导致的异常)。我相信它会在需要时调用UI线程,但我对其内部结构不太熟悉。

由INotifyPropertyChanged引发的值更改会自动编组回调度程序。()

在您喜欢的任何线程上触发此事件



INotifyCollectionChanged
触发的值更改未可靠地编组到调度程序上。()


如果您需要从不同的线程更新可观察的集合,请遵循此链接中的建议

除了@Rob Fonseca Ensor的答案之外,对于那些幸运地使用WPF4.5的人来说,还有一些好消息:

WPF使您能够在创建集合的线程以外的线程上访问和修改数据集合。这使您能够使用后台线程从外部源(如数据库)接收数据,并在UI线程上显示数据。通过使用另一个线程修改集合,您的用户界面将保持对用户交互的响应。()


乔纳森·安托万(Jonathan Antoine)有一个有用的总结:

+1公顷!每天学一件新东西。刚刚做了一个快速测试来确认这一点……我确信在使用wpf时我必须将值封送到UI线程……也许我已经老了……您当然必须封送针对实际控件的任何调用(
textBox.Text=“Foo”)
,但数据绑定框架有点帮助。对于WPF4.5来说情况并非如此:csharplive.wordpress.com已关闭,你有什么建议吗?@franssu