`
yanyanquan
  • 浏览: 451392 次
  • 性别: Icon_minigender_1
  • 来自: 江门
社区版块
存档分类
最新评论

WPF与WinForm的抉择

阅读更多

微软曾经对WPF(代号Avalon)抱很大的期望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不承认。几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸软件开发领域还有不小的距离。不过,刚转到 WinForm上一两年的开发人员们都很困惑,WinForm究竟还有没有未来。微软只是模糊地说短期内还是WinForm,长期是WPF。想想“维纳斯”,“TabletPC”,“Hailstorm”,“IE Channels”等等就知道这位老大的话不能全信。到底何去何从就仁者见仁智者见智了。

英文开发社区内有句流行的话,叫“No silver bullet”,就是说没有万能,没有一个工具或方法能完美地解决所有的问题。同样这对WPF也适用。与其说WPF是WinForm的替代品,它更像DHTML和ASP.NET。夸张一点说,如果要给微软的技术画个家谱的话,DHTML就是WPF的直系亲属。WPF里的大量核心概念和结构,如属性引擎、事件模型等,都是继承自 DHTML,最大的一个不同是外观和控件逻辑的分离。WPF应用和DHTML应用(HTA)的相似性也非常大,不同点是WPF应用可以完全脱离IE。也就是说,WPF和网页、ASP.NET、SVG是一套体系,可以比作XML版的Flash,而和WinForm完全不同。WPF的长项应该是网页式应用,当然它也可以用来做别的东西,就像Ajax可以做在线文本编辑器一样。

也许有人还没听说过DHTML。DHTML即Dynamic HTML,是微软在90年代末在IE4里支持的扩展了的HTML,主要特征就是可以动态修改网页上对象的属性,而且具有类似Flash里的时间线,可以做动态的网页。缺点是难于开发和调试。后来主要被用来做翻转按钮。DHTML的一个页面集合和脚本资源一起可以打包成HTA应用,HTA应用可以在本机以及网络上使用。但从现在还有多少人记得DHTML就知道这东西没成才。

回到WPF,WPF只在XP和Vista上有完整的支持,在其他平台和浏览器下,微软提供了WPF/E(开发代号)。WPF/E的程序是非编译的,就是说是发布源码的,和HTML加JavaScript一样。另外WPF/E目前只支持JavaScript。那么,WPF/E能用来做什么应用大家也就心里明白了。要在WPF/E和Flash间选择的话,只要想想XML和压缩的二进制文件的区别就行了,现在几兆的Flash比比皆是,改用XML格式的话会有多大,诸位心里明白。不过要是个网页Form应用的话,WPF/E确实比Flash更强一些,不过有Ajax在,杀鸡未必要用牛刀。如果你的应用只支持XP 和Vista,那么你可以得到WPF的全部优势。

WPF有三种应用模式:应用、浏览应用、文档应用。应用就是一般的窗口应用,浏览应用就是象网页一样的一页一页的应用,文档应用是用来显示内容的浏览应用功能子集,而不是MVC模型。一般应用其实也就是每个页面拥有一个独立的窗口。估计VB用户想到了当年的html控件,Delphi用户想到了 IntraWeb。简单的理解就是把WinForm界面换成了网页,当然这个网页的功能比HTML强得多,也复杂得多。

WPF是一套很复杂的体系,它的界面可以用代码生成,不过绝大多数人都会用XAML来生成。XAML可以认为是WPF的HTML。制定标准的人总是说 XML是可读的,但多数人认为它是用来给机器读的。XMAL基于XML,同时做了相当的扩展以弥补功能的不足。要手写XAML,必须了解WPF,了解 XML(namespace,link等等),了解XAML的规则,了解XAML扩展的语法,能够记住大量的标识符和引用关系。就像今天人们大多不再手写 HTML一样,人们大多不会愿意去手写更复杂的XAML。而且按照微软的设计目标,WPF要将界面设计和程序逻辑分开,交给不同的专业人员去做。也就是说,界面的设计是要交给美工的。相信我,找一个能够手写XAML的美工很难。微软为此提供了Expression系列软件,当然不是免费的。当然 VisualStudio里也有一定程度的支持,但这意味着由程序员来做灵活复杂的界面,更容易做出丑陋的界面;或者让美工来用 VisualStudio,功能有限而且有点昂贵。当然也可能有个不错的UI程序员,两全其美;或者老老实实地做简单朴素的界面,以后有机会再找美工润色。

程序员都喜欢谈论速度。WPF是可以硬件加速的,在DirectX 9级显卡和安装了较新的驱动的情况下,WPF会得到部分或完全的硬件加速。WinForm是基于GDI+的,没有硬件加速,只有v2.0里的非兼容模式下的文本是通过GDI加速的。所以,长远来说,WPF有更好的性能。

那么现在回到最初的问题,WPF和WinForm,赌注该压哪一边。编辑器类程序是难以移植到WPF的,如World、Excel、 PowerPoint、Photoshop、IDE等。显示类和一般的商务类应用都是可以移植的,现有的Web应用都是可移植的。也就是说,WPF的应用范围和Ajax、Flash是有很大重合的,WPF的竞争力就是在和代码的集成上。随着Adobe加紧升级Flash的应用功能,一种可能的结果是WPF 和Flash压缩了Ajax的生存空间,WPF/E没有获得足够的支持,WPF成为Windows专用的应用,Flash作为跨平台方案存在。而对 WinForm程序来讲,嵌入一些WPF内容是容易的。在WPF前途未卜的情况下,WinForm仍然是目前一般应用最稳妥的途径。


[讨论]对比MFC ,Winform ,WPF

对比MFC ,Winform ,WPF
MFC 生成本机代码,自然是很快。可是,消息循环,减缓了界面显示速度。

winform 封装了 win32 的api,多次进行P/invoke 操作 (大部分使用p/invoke操作封装),速度慢。

wpf是一种新的模型,不再使用win32 模型,自己新建模型,使用dx 作为新的显示技术,直接访问驱动程序,加快了运行速度,可是,这种模型,需要支持dx 9 的显卡,硬件要求高(你还能找到现代机器不支持dx9 的吗?)

开发效率上,MFC <WPF <winform

尽管MFC开发界面执行效率高但是开发效率低,作为现在的项目开发来说时间跟开发效率往往能决定项目的成败,所以除非有特别的需求,否则都回尽量避免用mfc来做开发,MFC只是一个弱封装器。

开发成本,MFC〉wpf〉winform

用MFC开发成本太高,对开发者能力要求更高,作为客服当然希望开发的费用越少越好,开发者当然希望钱赚得越多越好,这样一比,这也是MFC没落的一个很大的原因。

界面执行效率上,MFC==WPF〉winform

随着计算机硬件的性能提高,多核cpu的普及,它们的差距会越来越小。

开发灵活性上:wpf〉MFC〉winform

美观上:Wpf〉winform〉MFC

这一项中MFC下要开发出一个华丽的ui极其困难,也许你可以说你可以用控件,但是商业开发控件是要收费的!!Wpf很容易就可以做出vista那样的ui特效。mfc要写出这种效果不知要写到何年何月。
这样一来MFC存在的价值就更低了。效率和美观不如Wpf,开发效率又不如winform,预计不出10年,随着vista取代xp,mfc将会退出历史舞台。

内存使用上:wpf〉winform〉MFC

随着计算机硬件的性能提高wpf这个缺点会被忽略。

使用范围:wpf〉MFC==winform

有以上可知:WPF 大有取代winform 和MFC之势,从未来net的发展来看,MFC以后只会变成一种经典,作为一种技术来供开发者学习,winform和WPF两者会并存发展,但最终都会被WPF取代,最终实现桌面应用程序和浏览器应用程序的统一。

分享到:
评论

相关推荐

    wpf调用WinForm程序

    5. 通信与事件处理:由于WPF和WinForm的事件模型不同,你需要适配两者之间的事件。通常,可以使用委托来传递数据和处理事件。 需要注意的是,虽然可以实现WPF和WinForm的互操作,但这样做可能会带来一些性能问题,...

    host wpf in winform

    在.NET框架中,通过System.Windows.Forms.Integration命名空间提供的ElementHost控件,可以实现WinForm与WPF的集成。ElementHost是一个专门设计用于承载WPF UserControls或Windows的WinForm控件,它使得在WinForm上...

    Winform与WPF窗体互相调用方法

    本篇将详细介绍如何实现Winform与WPF之间的交互。 首先,让我们来看Winform调用WPF窗体的方法: 1. 创建WPF用户控件:在WPF项目中创建一个UserControl,并设计好你需要的界面和逻辑。这个UserControl将成为被...

    WPF 与 WinForm 调用系统右键菜单/资源管理器右键菜单/桌面右键菜单示例

    在Windows应用程序开发中,WPF(Windows Presentation Foundation)和WinForm是两种常见的UI框架。它们都允许开发者构建功能丰富的桌面应用,但各自有着不同的特性和优势。本示例主要探讨如何在WPF和WinForm应用中...

    WPF和WinForm集成MiniBlink49版本

    **WPF与WinForm集成MiniBlink49详解** 在.NET开发领域,Windows Presentation Foundation (WPF) 和 Windows Forms (WinForm) 是两种常见的UI框架。它们分别提供了丰富的图形渲染和用户交互能力。然而,有时我们需要...

    WPF和WinForm相互打开.zip

    在.NET框架中,Windows Presentation Foundation(WPF)和Windows Forms(WinForm)是两种不同的UI技术,用于构建桌面应用程序。WPF提供了丰富的图形渲染、数据绑定、样式和模板等功能,而WinForm则更加轻量级,适合...

    wpf嵌入winform的exe程序,而不是嵌入winform窗口

    wpf嵌入winform的exe程序,而不是嵌入winform窗口,winform中 有toolStripButton1绑定了Click事件 toolStripButton1_Click,点击后可以触发

    WPF登录打开WinForm主界面

    在本文中,我们将深入探讨如何...总的来说,理解和掌握WPF与WinForms的混合使用对于开发跨平台兼容、功能丰富的桌面应用程序非常有帮助。通过WPF的美观界面和WinForms的强大功能,你可以构建出满足各种需求的应用程序。

    WPF对比WinForm实例

    **WPF与WinForm对比分析** Windows Presentation Foundation (WPF) 和 Windows Forms (WinForm) 是.NET Framework下两种主要的用户界面(UI)开发框架,它们各有特点,适用于不同的应用场景。下面将通过一个实例,...

    winform和wpf的相互调用

    解决winform和wpf的相互调用,包含在wpf中调用winform控件,wpf和winform控件的交互等

    WPF调用Winform 的控件

    在.NET框架中,Windows Presentation Foundation (WPF) 和 Windows Forms (WinForms) 是两种不同的UI技术,它们分别提供了丰富的用户界面开发能力。然而,在某些情况下,我们可能需要在一个WPF应用中使用已有的...

    wpf+winform实现rdp远程连接

    而WinForm是较早的UI框架,虽然在某些方面不如WPF先进,但在特定情况下,如调用Windows API或与旧系统集成时,WinForm仍具有优势。 在本项目中,我们需要在WPF应用中嵌入一个WinForm组件来实现RDP连接。这可以通过...

    wpf 使用winform.NotifyIcon

    wpf 使用winform.NotifyIcon

    Winform+wpf 结合使用小例

    5. 数据绑定和交互:在WinForm和WPF控件之间进行数据交互,利用WPF强大的数据绑定机制,可以使WinForm的数据模型与WPF控件的视图同步。 6. 调试和测试:确保在WinForm中运行WPF控件时没有性能问题,所有功能都能...

    AutoUpdate软件自动更新,兼容wpf、winform

    【原创】AutoUpdate软件自动更新,兼容wpf、winform,各项更新进度,更新内容说明等等,用户体验度上还不错!预览地址:https://blog.csdn.net/xukai515786/article/details/103727707

    Winform调用WPF控件

    首先,我们需要了解Winform与WPF的互操作性。这主要通过System.Windows.Forms.Integration命名空间中的ElementHost控件实现。ElementHost是Winform用来承载WPF控件的容器,它允许WPF元素在Winform窗口中运行。以下...

    WPF 使用 WinForm 播放 gif

    3. **数据绑定(Data Binding)**:可能通过依赖属性(Dependency Property)将WPF的命令或者事件与自定义控件的方法绑定,以实现XAML中的控制逻辑。 4. **内存管理**:GIF动画播放时内存占用问题,可能通过优化...

    Winform窗体嵌入WPF程序并发送消息

    此外,还可以利用事件驱动的方式实现WinForm与WPF之间的通信,例如在WPF中定义自定义事件,当WinForm需要传递信息时触发事件,WPF监听这个事件并做出响应。 总之,通过以上步骤,我们成功地在WinForm中嵌入了WPF...

    自定义的文件路径选择框,适用于C#WPF和WinForm

    标题“自定义的文件路径选择框,适用于C# WPF和WinForm”提及的就是这样一个特定需求,即创建一个定制化的文件路径选择对话框,用于替代系统默认的`FolderBrowserDialog`。这种自定义组件在某些情况下能提供更高效、...

    WPF控件WinForm

    这些内容对于理解和学习WPF与WinForm的交互是非常宝贵的。 通过理解和掌握这些知识点,开发者可以灵活地在WinForm项目中集成WPF控件,充分利用两者的优势,构建更加美观和功能丰富的应用程序。

Global site tag (gtag.js) - Google Analytics