WPF数据绑定对于多线程的支持一直都没什么具体计划。当对象在非UI线程上发出了属性变化事件时,数据绑定基础设施就会对其作出响应。通常这是可行的,但因为潜在的竞态条件,这么做并不是真正安全的。从计算机科学的视角来看,禁用跨线程的访问是更为正确的做法,因为这才是导致集合变化事件的根源。
但遗憾的是,开发者并不总是在意正确性,他们只是想把事情做完。这样,他们会使用各种“线程安全”或是“分发安全”的可观测集合。在所有这些做法中,基本的设计就是在调用前将集合变化的事件编排到正确的线程中。在这种情况下,正确的线程就是分发者所运行的那个线程。但遗憾的是,这么做并未消除竞态条件的可能性。
在WPF 4.5中,微软向开发者提供了一种更为安全的解决方案。通过调用BindingOperations.EnableCollectionSynchronization,WPF数据绑定引擎会使用锁。其默认行为是获得前述调用所指定对象上的锁,但你也可以使用更为复杂的锁模式。但遗憾的是,这种方式很容易出错;对于后台线程来说,你很容易忘记获得集合的锁。当集合不再需要时,你还可能忘记禁用集合同步,这会导致内存泄露。
该技术的另一个问题是它并不会保护单个对象。这样当在锁下读取集合时,集合中每一项的属性就不一定能够保证会被安全读取。这对于复杂的getters以及无法以原子方式进行设置的属性来说极易产生问题(比如说大的值类型)。
我们强烈建议使用后台线程的开发者只使用集合中的不变对象来更新集合。如果对象无法保证是不变的,那么至少在确保属性getters的线程安全上要格外小心。当向集合中添加对象时,你最好不要使用该特性,而是将集合更新编排到UI线程中。
分享到:
相关推荐
WPF 4.5的数据绑定功能大大简化了UI与数据模型之间的交互。开发者可以将控件属性直接绑定到数据源,实现动态更新。在源码中,我们能看到各种数据绑定示例,如OneWay、TwoWay、DataContext等绑定模式的使用。 3. **...
这本书深入探讨了WPF 4.5的各个方面,包括XAML语法、UI设计、数据绑定、控件、图形和动画、布局管理、资源和样式、依赖属性、事件处理、多线程以及MVVM设计模式等。 1. **XAML**: XAML(eXtensible Application ...
### WPF 4.5 UNLEASHED:深入解析与应用 #### 一、WPF 4.5 UNLEASHED概述 《WPF 4.5 UNLEASHED》是一本专注于Windows Presentation Foundation(WPF)技术的权威指南。本书不仅受到了业界专家的高度评价,而且被...
- **多线程与异步编程**:利用WPF的多线程支持来处理耗时任务,避免阻塞UI线程。 - **图形性能**:了解如何优化图形渲染流程,减少重绘操作,提高应用流畅度。 #### 四、适用对象 - **初学者**:对于想要进入WPF...
在Windows Presentation Foundation(WPF)框架中,多线程加载是一项关键的技术,它允许应用程序在不阻塞用户界面(UI)的情况下执行耗时的操作。在标题“WPF 多线程加载”中,我们主要讨论的是如何在WPF应用中有效...
9. **多线程和并发**:在.NET 4.5中,探讨异步编程模型(async/await)在WPF中的应用,以提高应用程序的响应性。 10. **部署和测试**:介绍如何发布和部署WPF应用,以及进行测试的最佳实践。 这本书的源码部分通常...
此外,由于这些示例基于.NET 4.5,因此还可能涉及到多线程、异步操作和性能优化等内容。 总之,《WPF编程宝典》的源码集是一份宝贵的资源,它提供了一手的实践材料,帮助开发者深入学习和掌握WPF和C# 2012的精髓,...
5. **.NET4.5框架改进**: 包括性能优化、新的WCF和WF特性、ASP.NET改进以及更好的多线程和并发支持等。 **Pro WPF 4.5 in C#书籍简介** 《Pro WPF 4.5 in C#》是一本深入讲解WPF技术的权威书籍,第四版涵盖了C#...
9. **多线程编程**: WPF 4.5改进了对多线程的支持,提供了Dispatcher对象,使得UI更新更加安全和高效。 10. **触控和手势支持**: 针对触控设备,WPF提供了API来处理触摸输入和手势识别,适应现代多模式输入的需求。...
9. **多线程与并行编程**:WPF支持多线程和并行编程,可以提升用户体验。源代码中可能包括Dispatcher对象的使用,以及BackgroundWorker类的应用。 通过《WPF编程宝典C#2012和.NET4.5(第4版)》的源代码,读者不仅...
在C# 2012和.NET 4.5的背景下,WPF的性能和功能得到了进一步增强,支持更多的硬件加速,提供了更好的多线程支持,同时增强了对触控设备的支持。 XAML(Extensible Application Markup Language)是WPF中用于描述...
9. **多线程支持**:WPF提供了Dispatcher机制,使得在UI线程外执行操作变得可能,避免了UI的阻塞,提高了程序响应性。 10. **集成打印和文档支持**:WPF提供了完善的打印功能,并支持复杂的文档格式,如XPS文档。 ...
7. **多线程和并发**:4.5版本提供了更好的多线程和并发支持,如Task Parallel Library (TPL)的扩展,使得并行编程更加容易。 8. **BCL增强**:基础类库(BCL)中增加了一些新的类和接口,如异步文件操作和网络请求...
9. **多线程**:在WPF中使用BackgroundWorker或Task进行后台处理,避免阻塞UI线程。 10. **集成其他技术**:如WCF服务、Entity Framework数据库访问,以及与Azure等云服务的集成。 深入学习这些内容,开发者将能够...
书中可能涵盖了从基础概念到高级技术,如动画、资源管理、多线程和部署策略,为不同层次的读者提供了丰富的学习内容。通过实践书中的示例,读者可以逐步提高WPF开发技能,成为熟练的WPF开发者。
6. **多线程和并行编程**: WPF支持使用C#的Task Parallel Library (TPL)进行多线程和并行编程,优化性能,提升用户体验。 **学习资源与实践** 1. **官方文档**: Microsoft 提供了详细的WPF官方文档,包括教程、API...
书中的Pro WPF 4.5 in C#部分则可能更深入地探讨了WPF在.NET 4.5环境下的应用,包括多线程、性能优化、触控支持等内容。 总之,WPF为开发者提供了构建现代桌面应用程序的强大工具集,学习并熟练掌握WPF,将有助于...
11. **多线程和异步编程**:WPF支持后台线程更新UI,源码中可能有如何使用BackgroundWorker或Task类进行异步操作的实例。 通过研究这个源码库,开发者不仅可以了解WPF的基本概念和技术,还可以学习到如何在实际项目...