wpf和winform的优缺点(WPF与winform哪个比较好)

本文目录
WPF与winform哪个比较好
WPF将Windows表示层发展至用声明式语言进行开发,并且融入大量的动画和特效,使得在Win32中极难做到的富客户端应用能在WPF中信手拈来,同时用矢量图取代位图,引入路由事件(RoutedEvent)对元素树进行多层监听,通过依赖属性(DependencyProperty)动态变更控件树等。在WinForm程序开发时,一旦涉及多线程操作,我们一般不可能没有见过InvalidOperationException这个异常。这个异常的出现多数情况是由于worker线程(子线程)修改主线程控件(或对象)的属性而导致的非法操作,当然这种做法也非每次都会失败,这主要取决于子线程想要操作的对象是不是线程安全的。
WinForm控件提供了InvokeRequired属性来判断当前线程是不是创建此控件的线程。一旦控件创建完成,那么InvokeRequired的效率将会不错,且也能保证安全。不过若是目标控件尚未被创建(此时,虽然C#对象已经存在,不过其底层的窗口句柄仍旧为null),那么InvokeRequired则可能会耗费比较长的时间。(它会从下至上遍历整个控件树,直到找到一个可以承载此控件且已经实例化并被创建了的父控件,这种做法可以保证子控件将会与父控件在同一个线程上创建。找到合适的父控件之后,框架即可执行同样的检查,比较当前线程的ID和创建该父控件的线程的ID。)。若是框架无法找到任何一个已创建的父窗体,那么则需要找到一些其他类型的窗体。若在层次体系中无法找到可用的窗体,那么框架将开始寻找暂存窗体(parking window),暂存窗体让你不会被某些Win32 API奇怪的行为所干扰。简而言之,有些对窗体的修改(例如修改某些样式)需要销毁并重新创建该窗体。暂存窗体就是用来在父窗体被销毁并重新创建的过程中用来临时保存其中的控件的。在这段时间内,UI线程仅运行于暂存窗体中。
通常,WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。
WPF为Windows Presentation Foundation的缩写 ,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。 程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。
有人说WPF比winform强大很多为什么都不转
WPF比Winform强大的说法,并不确切。
首先,WPF将Winform的绝大部分功能,用另外的更复杂臃肿的方式重新封装和实现了一遍。
其次,对特定问题推荐了一些新的技术方案和框架,要重新学习。而且效果不一定更好。
第三,为了适应新的操作系统,扩展提供了一些新特性。而微软新操作系统,针对平板和手机触屏的优化,反而让桌面程序更难于使用。通常我们都要开发兼容XP旧系统的程序,因此这部分新特性几乎没有什么实际作用。
总体而言,完成同样的任务用WPF比用Winform更复杂、更慢、更臃肿了。占用更多的内存,提供更慢的运行速度。
所谓强大的新技术,并不能转化为生产力。旧方案大部分也可以很好完成。
针对手机和平板的新特性,随着微软移动份额逐渐趋向于零,而像裹脚布一样几乎无用武之地。
但是,微软开发平台的winform已经很久没有维护改进了。新入门者可以直接学WPF,未来会更贴近时代。如果已经掌握了winform,那就没必要转WPF,因为转换短期内获益不大。
winform的优点
WinForm含有一个窗体,作为控件和其它图形的平台,可以开发智能客户端,易于部署和更新图像,无论是否连接到Internet都可以工作,并且可以用比传统的基于Windows的应用程序(如MFC开发的Windows应用程序)更安全的方式访问本地计算机上的资源。
WinForm和Web窗体。两者在开发环境中都具有完全的设计时支持,提供同样丰富的用户界面,由于这种功能相似性,要决定哪种技术适合给定的应用程序可能有点困难。
如果创建的是一个公众可以通过Internet访问的电子商务网站,则应该使用Web窗体页开发此应用程序。如果正在生成需要利用客户端计算机的全部功能,并且处理的工作量很大,要求响应迅速的应用程序(比如办公程序,游戏软件,销售系统),应该使用WinForm,它是在.NET框架中生成的,因此它可以访问客户端计算机上的系统资源,以消除由不希望的访问引起的任何安全性风险或潜在问题。
Web窗体创建一个浏览器用户界面组成的应用程序,包括公众可通过万维网使用的应用程序,比如电子商务应用程序。但是Web窗体并不仅仅用于创建网站,许多其他应用程序同样适用于“瘦前端”,比如基于Internet的雇员手册或津贴应用程序。任何Web窗体应用程序都有一个重要的优点,就是无需发行成本。用户已经安装了所需的唯一一个应用程序——浏览器。
Web窗体应用程序与平台无关,即它们是“延伸”的应用程序。不论用户的浏览器类型是什么,也不论使用的计算机类型是什么,他们都可以与应用程序进行交互。Web窗体应用程序提供了一些即使在非Web上下文中依然有用的功能。因为这些功能依赖于HTML,Web窗体应用程序适合任何种类的文本密集型应用程序,尤其适合那些文本格式设置对其很重要的应用程序,这些限制防止用户访问某部分应用程序。
WPF在图形方面比WinForm功能更强,高保真度,克服WinForm依赖的GDI和GDI+的缺点。WinForm制作3D很困难,而WPF很容易,下面是WPF编写的3D示例:

更多文章:
amaze ui 树状结构导航(网站结构怎么做SEO,树状结构与扁平结构的区别)
2026年4月15日 09:00
jquery多级联动下拉菜单(jQuery实现动态级联选择问题,比如3个下拉框,选择第一个其他的2个选项自动把内容选中.)
2025年9月15日 16:15
vue页面之间回调(vue.http 怎么定义jsonp的回调名)
2026年7月27日 06:30
a和b的ascii码(英文字母A的ASCII码值十进制的是65,那么B的ASCII码是什么)
2026年1月28日 12:30
学51单片机编程选用Keil uvision 和medwin哪个软件更好?为什么没有国产的C/C++的编译器
2025年10月8日 05:45
用fprintf为什么写不进文件(急求C语言大神,下面的程序运行正常也能读取文件,但是无法向文件中写入,问题出在哪)
2025年11月22日 18:45
登陆界面背景图(Win7登录界面背景图在哪里改(输入密码那))
2026年7月27日 18:00
我的世界displayname(minecraft我的世界怎样给物品改名)
2026年1月14日 14:45
shell脚本写加减乘除运算(用shell做个加减乘除运算)
2025年6月20日 21:30
sql语句查询男女生人数(SQL查询,按性别显示学生信息,并分别汇总男生女生人数)
2026年7月25日 08:00











