WPF和WinForm开发的区别是什么? 2010-11-06 21:43 WPF在WinForm上开发后,从技术发展的角度来看,WPF无疑比WinForm先进。 与WinForm相比,我认为WPF具有以下优秀特性。
解决窗口问题
Windows GDI和WinForm开发中复杂的GUI APP应用程序使用大量控件,如网格。 每个控件或网格单元格都是一个小窗口,使用窗口句柄。 控制制造商提供了许多优化方法,但遇到Out of Memory或' Error Create Window handle ',程序将退出。
WPF从根本上改变了控件的显示模式,因为控件不使用窗口,所以不会占用窗口。 理论上,如果WPF只有一个主窗口,则WPF只使用一个窗口(如果忽略Dispatcher的隐藏窗口)。 所以WPF GUI程序并不意味着窗口不够。
多线程处理
开发WinForm程序时最头疼的问题之一是worker线程更改控件属性导致程序崩溃,这种非法操作并不是每次都失败。 WinForm控件提供了InvokeRequired属性,用于确定当前线程是否为控件创建线程。 问题是,如果控制树很深,这个属性会变慢。
WPF开始设计的时候,考虑了多线程的问题。 大多数WPF类由DispatcherObject继承。 DispatcherObject实际上是Dispatcher的简单软件包。 Dispatcher提供了一种类似于InvokeRequired的方法(检查访问)。 这个方法只需要比较线程的ID,所以很快。 另外,Dispatcher提供了优先队列、异步调用、Timer等功能,简化了多线程GUI程序的开发。
控件的合成
要在WinForm中实现带有复选框的下拉菜单,必须处理复杂的Window消息。 在WPF控件的Content Model和Layout系统上,WPF控件可以包含任何类型的控件,甚至可以包含. Net CLR对象。 许多现代控件制造商也提供了Composition控件,实现方法也与WPF的Content模型非常相似。 WPF开发团队应该借鉴了Infragistics的很多想法。 有了这个基础,新WPF控件的开发就更简单了。
XAML
我个人认为XAML是WPF中划时代的东方。 在XAML中,可以用文本描述复杂的Object Graph。 VB中有这个想法,但XAML更简单,因为它使用工具生成XAML。 通过Command、Routing Event等机制,界面设计者和程序员有比较明确的界限。
依存属性
WinForm开发中经常遇到的问题是,一个控件的值会改变,其他控件也会改变。 解决方案,是否写代码,是否用数据绑定,前者接口和代码分不开,后者还不够灵活。 另一方面,WPF在这方面可以通过XAML简单地链接相关属性,通过扩展实现复杂的绑定关系。
总的来说,我认为WPF应该是GUI发展的一个延续。 原本GUI中复杂的东西,现在可以用简单的文本来实现。
主要参考资料和工具:
windowspresentationfoundationunleashedbyadamnathan
MSDN
essentialwindowspresentationfoundation (强烈推荐*,并回答了许多WHY问题) ) ) )。
windows wpf源代码
Reflector转载于:https://www.cn blogs.com/gld sb/p/4188718.html