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