【问题标题】:Will Windows Forms be deprecated in favor of WPF? [closed]是否会弃用 Windows 窗体以支持 WPF? [关闭]
【发布时间】:2009-05-27 00:26:16
【问题描述】:

我们正在启动一个新项目,并试图决定使用 Windows 窗体或 WPF。

我阅读了一些其他 Stack Overflow 帖子,并意识到 WPF 在数据绑定和外观领域具有一些优势,但也有陡峭的学习曲线和相当不成熟的工具和控件。

我们希望更好地了解 Microsoft 是否计划停止 Windows 窗体技术的新开发并强制所有新开发最终转到 WPF,或者这两种技术是否都将得到维护和改进。 (或者他们只是在下定决心之前等待,看看情况如何?)

目前,对于不需要在 UI 中进行额外花里胡哨的 line of business 应用程序,WPF 似乎不一定是最佳方式。但是,最好知道 WPF 是否是我们迟早需要接受的东西。

【问题讨论】:

标签: wpf winforms


【解决方案1】:

这部分是合理的论点,部分是发自内心的咆哮......

WinForms 基于自现代 Windows 诞生以来就存在的 user32/GDI 技术。从任何意义上来说,它都不会去任何地方:它不会获得新功能;它不会失去支持。

也许它会。 .NET 4.0 中的图表 API 是新的,并且是为 GDI 而不是 WPF 编写的。

总的来说,Microsoft 的新技术发展历程如下:

  1. 发明新的 API。
  2. 使用该 API 进行 2 或 3 个产品周期的创新。
  3. 意识到继续创新意味着对向后兼容性做出不合理的让步,或者意识到该技术最初并未解决。
  4. 通过包装或保留现有 API 来发明新的 API。现有的 API 不会消失,但新的东西也不会使用它。

RDO -> DAO -> ADO -> ADO.NET -> LINQ to SQL -> 实体框架,折腾一些 ODBC ......有一个“死”和包装技术的宝​​库,它们仍然可用并且仍然可用今天存在。这些是数据访问技术,但同样的想法也适用; UI 框架的使用时间更长一些,因为它们是应用程序中最显眼的区域。

如果我戴上我的 Nostradomus 帽子,我可以肯定地说,当 .NET,哦,6.0 在 2015 年发布时——这听起来很遥远,但与 2003 年一样接近——WPF 将“死” ” 作为 Windows 窗体,因为将创建一些其他漂亮的托管界面,以消除 WPF 的所有尚未发现的错误和不便。谁在乎?到那时,我们今天喋喋不休的一切都将被弃用。 (无论如何,在 .NET 5.0 中必须做出一些让步,因为框架变得非常大。)

如果有的话,Windows Forms 的目标是它基于已经存在了十多年的技术,并且这种惯性不会很快消失:您输入的浏览器正在使用 GDI,任务栏正在使用 GDI,您的即时消息应用程序正在使用 GDI,Windows 7 中的新功能区控件正在使用 GDI,您办公桌上 60 美元的打印机正在使用 GDI 打印机驱动程序,您手机上运行的 Windows CE 应用程序运行一个端口Windows Forms 和 GDI,Windows Vista 中的新事件查看器正在使用 Windows Forms,并且在 Windows Forms 平台背后有一个庞大的第三方组件社区——WPF 是一个非常小的、仅存在于托管世界中的小众产品,它本身比它的非托管对应物要小。

为此,我觉得所有这些“WinForms vs. WPF”的讨论都在夸大其词;正如微软营销可能让我们相信的那样,这些技术并不相互排斥或劣势/优越,而且微软的开发人员足够聪明,可以实现这一点。它们只是不同,其中一个恰好更老。如果我们不定期考虑这一点,我们都会在 2005 年听取 Gartner 的意见,并完全停止构建 Windows 应用程序,并将一切都转移到 Web 上的 AJAX 上……使用我们的 SOA 接口……公开一个替代的 REST 接口…… . 在该后端使用 TDD DDD 模型...由 ORM 从数据库中抽象出来。

因为害怕被弃用而如此急切地放弃一项技术只会让我们的客户确信,我们将在编程软件解决方案方面保持持续水平的缺乏经验和无能。

可以肯定,WPF 是未来的一部分,但它不是未来。就个人而言,我正在观望 WPF 是否在 UI 技术意义上“成功”,而以前的数据访问技术没有,尽管 Visual Studio 在 2010 年采用它是一个非常令人欣慰的迹象,表明微软实际上是认真对待它的在旗舰产品中进行测试。

总结一下:如果您正在构建 LOB 应用程序,我不会对使用 WinForms 感到内疚。如果您需要高级布局方案,WPF 互操作始终可供您使用,就像偶尔使用 Flash 对象增强常规网站一样。但是对于其他任何事情,您应该为您的客户提出一个将整个团队和外壳转换为 WPF 的充分理由; Windows 窗体有它的问题,但与任何平台的一半战斗是知道问题和限制是什么,而且世界上大多数人(包括 Microsoft)仍在学习 WPF。

【讨论】:

  • 很好的答案!无论如何,我认为我需要轻松进入 WPF,并且我不想将项目计划“打赌”在一次学习它上。我的感觉是在 Winform 中只包含一些 WPF 控件,除非客户了解风险并且仍然希望继续使用新技术以获得其潜在收益。
  • 很棒的帖子。 WPF 有一个非常陡峭的学习曲线,因为它所做的事情与 WinForms 有很大不同(数据绑定不同,布局不同等......)。但是一旦你掌握了它,它就会拥有强大的功能。
  • 另外,由于两者之间的互操作性,如果您在应用程序中遇到适合 WPF 的特定情况,您可以将其托管并在该位置使用它,同时通过休息。在这种情况下,我从不理解非此即彼的论点。使用在每种情况下最有效的方法,并且 MS 已经非常友好地使用 WinForms 和 WPF 真正实现了强大的混合和匹配场景。 :)
  • 我不同意图表 API 可以指示任何内容,尤其是。因为这是从在 WPF 创新之前发布产品的 Dundas 购买的。
  • 您提到了 Visual Studio 中的 dogfooding。好吧,如果 VS 2010 有任何迹象,我不为所动。这东西真的很slooooooowwwwww。
【解决方案2】:

在 Win32 出现之前不会弃用 WinForms ...这可能是相当长的一段时间!

(记住 WinForms 基本上是对 Win32 的抽象)

另一方面,WPF 对 Win32 的直接依赖很少,因此可能会在未来版本的 Windows 上形成“全新启动”UI 层的基础。到那时,我会想象 Win32(以及 WinForms)将被完全抛弃,只能通过虚拟化获得。正如我所说,这可能还很遥远:)

【讨论】:

  • 我必须说,迄今为止我见过的最好的弃用模型是“把它变成开源”。
【解决方案3】:

Microsoft 对 .NET Framework 及其中所有类的支持政策是 5+5:发布后 5 年的主流支持,然后提供 5 年的扩展支持,或收费。

随着 .NET 4.0 更新(包括所有 WinForms 内容)于 2009 年发布,您将获得 5 年的主流支持,直到 2014 年,任何基于 .NET 4.0 构建的 WinForms 应用程序。

很可能 .NET 4.0 之后的任何内容也将包含 WinForms,在这种情况下时钟会重置。

此 5+5 政策适用于所有与业务相关的基础架构软件:Windows、Windows Server、SQL Server、Visual Studio、.NET 等。

关键是,您不必担心缺少对 WinForms 的支持。

但是,之前的海报是正确的 - 进步正在进入 WPF。

【讨论】:

    【解决方案4】:

    我不会太担心长期支持。 WPF 最近可能受到了大家的喜爱,但是那里有太多的 WinForms 代码需要放弃支持。毕竟,即使是 MFC 仍然会随着每个 Visual Studio 版本获得更新。

    【讨论】:

      【解决方案5】:

      我认为 Windows 窗体将继续由 Microsoft 维护,但仅在小方面进行了改进。所有热门的新创新都将归于 WPF。 Windows 窗体与LINQ to SQL 的位置相似。 LINQ to SQL 是一个紧凑、紧凑、快速的ORM,非常棒,但微软正在努力支持Entity Framework

      Windows 窗体非常适合它的本质和用途,即小型、紧密封装的应用程序。它还有很多年的寿命。

      如果您想要一个可以(更)轻松地在 Web 界面、WPF 界面或 Silverlight(甚至是 Flex)界面之间移植的应用程序,Windows 窗体可能不适合您。这些其他接口使用基于标准的标记,以及更适合企业开发的架构。

      【讨论】:

      • WinForms 完全能够利用 WCF、Web 服务和企业数据库。这是一个相当大胆的声明。多年来,它一直被用来为一些相当大的应用程序提供动力,我相信它会继续被使用。我(大部分)同意你的第一段,但老实说,我认为第二段相当不准确。
      • 感谢斯科特的不信任投票。当然,Winforms 能够进行企业开发。真正的问题是,鉴于微软正在大力支持 WPF,你愿意吗?
      • 如果您不需要附加功能,没有理由不这样做。 WinForms 的学习曲线仍然比较浅,而且并不是每个人都有为他们工作的设计师。
      • 我也同意 WCF 在 WCF、Web 服务等方面没有优势。它似乎有一个陡峭的学习曲线,不仅对于过渡的人,而且对于刚接触的人Winforms 和 WCF 也是如此......
      • 您还可以通过使用 MCV/MVP 模式最大限度地减少将应用程序移植到新的 UI 框架/平台的痛苦
      【解决方案6】:

      我当然不会认为 WinForms 已死……但我也不会在其中编写新项目。出于各种原因,我会使用 WPF 编写所有新项目。最大的好处是,如果您使用 WPF/XAML,您向 Silverlight 的移植工作会容易得多。

      【讨论】:

      • 移植到 Silverlight 听起来不错,但事实是,我们创建的大多数内部 Windows 应用程序都是窗口而不是 Web,这是有原因的,我们预计不需要移植它们。俗话说,IAGH。
      • 它只是给你更多的灵活性......仅此而已。
      • 因此,两年后,移植到 Silverlight 的能力看起来并不那么诱人,因为微软基本上放弃了它,转而使用 HTML5 和 Windows 8。很难为未来做计划。跨度>
      • @DOK M$ 几乎不会放弃 Silverlight。那肯定是FUD。它仍然是一个强大的平台。然而,WinForms 早已被遗忘。我坚持我 2 年前说过的话:我不会在 WinForms 中编写新项目。
      • 您可以在 Google 上搜索“Silverlight 已死”来找到数十篇关于此的文章。 This one 说“现在有一个人的指标是关闭 Silverlight 作为一个品牌,团队中的大多数人已经分崩离析,其他人则完全离开了公司。”或者有Microsoft has Abandoned Silverlight and All Other Plugins in Metro IE
      【解决方案7】:

      几年前,我参加了Redmond 的 WPF 预览训练营,我向其中一位从事 Crossbow(WPF/Windows 窗体互操作)工作的人提出了同样的问题。他的回答是在可预见的将来会支持 Windows 窗体,但不能保证。

      鉴于此,我认为您可以将应用程序基于 Windows 窗体,因为您知道您将对 .NET 的下一或两个版本(例如,3-5 年)提供一定程度的支持。

      考虑到微软对 Win32 的持续支持,我个人打赌将近 10 年。您可能不会在每个版本中获得大量新功能,但您也不会被淘汰。

      无论如何,我实际上会更关心微软从富客户端技术到基于 Web 的技术的转变,但不足以忽视在任何一种情况下创建引人注目的应用程序的机会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-16
        • 2015-11-16
        • 2018-03-22
        相关资源
        最近更新 更多