WPF数据绑定线程安全性?

33

假设我有一个对象,我将其数据绑定到它,它实现了INotifyPropertyChanged接口,以便在值更改时告诉GUI...

如果我从与GUI线程不同的线程触发此操作,WPF会如何响应?

它是否确保从内存而非CPU缓存中获取属性的值?

更或者说,我正在询问WPF是否对包含属性的对象进行lock()操作...

3个回答

50

1
你肯定需要对实际控件进行调用转换(textBox.Text="Foo"),但数据绑定框架会有所帮助。 - Rob Fonseca-Ensor
请尝试以下链接,该链接提供了一个线程安全的解决方案,可以从任何线程工作,并且可以通过多个UI线程进行绑定:http://www.codeproject.com/Articles/64936/Multithreaded-ObservableImmutableCollection - Anthony
2
WPF4.5并不完全如此:https://msdn.microsoft.com/zh-cn/library/bb613588(v=vs.110).aspx#xthread_access - vines
7
csharplive.wordpress.com 宕机了,应该遵循什么建议? - franssu
1
@franssu web.archive.org 2 - Кое Кто
显示剩余4条评论

4
除了@Rob Fonseca-Ensor的回答外,对于那些足够幸运使用WPF4.5的人来说,有一些好消息: WPF使您能够在创建集合的线程之外的线程上访问和修改数据集合。这使您能够使用后台线程从外部源(例如数据库)接收数据,并在UI线程上显示数据。通过使用另一个线程来修改集合,您的用户界面保持对用户交互的响应。(https://msdn.microsoft.com/en-us/library/bb613588(v=vs.110).aspx#xthread_access) Jonathan Antoine提供了一个有用的摘要:http://www.jonathanantoine.com/2011/09/24/wpf-4-5-part-7-accessing-collections-on-non-ui-threads/

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

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