将大型C#winforms应用程序升级到WPF的最简单方法是什么?
题
我处理大型C#应用程序(大约450,000行代码),我们经常遇到桌面堆和GDI处理泄漏的问题。 WPF解决了这些问题,但我不知道升级的最佳方式是什么(我希望这需要很长时间)。应用程序只有几种形式,但这些形式可以包含许多不同的用户控件集,这些用户控件是以编程方式确定的。
这是一个内部公司应用程序,因此我们的发布周期非常短(通常为3周发布周期)。
是否有一些渐进的升级路径,或者我们是否必须付出巨大努力?
解决方案
您可以从创建WPF主机开始。
然后你可以使用<!> lt; WindowsFormHost / <!> gt;控制托管您当前的应用程序。然后,我建议在WPF中创建一个新控件的库。一次一个,您可以创建控件(我建议将它们设置为自定义控件,而不是用户控件)。在每个控件的样式中,您可以先使用<!> lt; ElementHost / <!> gt;控制包括<!> quot; old <!> quot;窗体控制。然后,您可以花时间重构并重新创建每个控件作为完整的WPF。
我认为仍然需要初步努力来创建控件包装器并为应用程序设计WPF主机。我不确定应用程序的大小和用户控件的复杂程度,所以我不确定会给你多少努力。相对而言,以这种方式在WPF中启动和运行应用程序的工作量要少得多,速度也快得多。
我不会那样做而忘记它,因为你可能会遇到控件相互叠加的问题(Windows窗体与WPF不兼容,尤其是透明胶片和其他视觉效果)
如果您需要更具体的指导,请向我们提供有关此项目状态的最新信息,或提供更多技术信息。谢谢:))
其他提示
你是否对这些作品使用了很多用户控件? WPF可以托管winform控件,因此您可以将部分分段引入主窗体。
WPF允许您将Windows窗体用户控件嵌入到WPF应用程序中,这可以帮助您以较小的步骤进行转换。
我认为你不仅仅是在寻找一个ElementHost来放置你庞大的Winforms应用程序。无论如何,这不是WPF的真正移植。 考虑这个线程上的答案什么是克服从Winforms迁移到WPF的更大障碍?,这将是非常有帮助的。
有一篇关于将.NET 2.0 winform应用程序迁移到WPF的非常有趣的白皮书,请参阅向.NET 3.5应用程序发展
论文摘要: 在本文中,我将概述在将.NET应用程序从1.x / 2.x发展为3.x时必须面对的一些思考过程,决策和问题。 。我<!>#8217;看看我们如何帮助我们的客户采用新技术,但仍保持业务可接受的发布时间表。