14

我在一个大型 C# 应用程序(大约 450,000 行代码)上工作,我们经常遇到桌面堆和 GDI 句柄泄漏的问题。WPF 解决了这些问题,但我不知道升级的最佳方式是什么(我预计这需要很长时间)。该应用程序只有几个表单,但它们可以包含许多不同的用户控件集,这些控件是通过编程确定的。

这是一个公司内部应用程序,因此我们的发布周期非常短(通常为 3 周发布周期)。

是否有一些循序渐进的升级路径,还是我们必须全力以赴?

4

5 回答 5

12

您可以从创建 WPF 主机开始。

然后您可以使用 <WindowsFormHost/> 控件来托管您当前的应用程序。然后,我建议在 WPF 中创建一个新控件库。一次一个,您可以创建控件(我建议使它们成为自定义控件,而不是用户控件)。在每个控件的样式中,您可以从使用 <ElementHost/> 控件开始包含“旧”窗体控件。然后,您可以花时间重构每个控件并将其重新创建为完整的 WPF。

我认为创建控件包装器并为应用程序设计 WPF 主机仍需要初步努力。我不确定应用程序的大小和用户控件的复杂性,所以我不确定这对您来说需要多少努力。相对而言,以这种方式让您的应用程序在 WPF 中启动和运行明显更省力且速度更快。

不过,我不会只是这样做而忘记它,因为您可能会遇到控件相互重叠的问题(Windows 窗体不能很好地与 WPF 配合使用,尤其是在使用透明度和其他视觉效果时)

如果您需要更具体的指导,请向我们更新此项目的状态,或提供更多技术信息。谢谢 :)

于 2008-09-21T20:16:07.597 回答
3

您是否使用大量用户控件来处理这些片段?WPF 可以托管 winform 控件,因此您可以分段将部分引入主窗体。

于 2008-09-21T19:31:09.267 回答
2

WPF 允许您将 Windows 窗体用户控件嵌入到 WPF 应用程序中,这可以帮助您以更小的步骤进行转换。

查看 WPF 文档中的WindowsFormsHost类。

于 2008-09-21T19:32:21.367 回答
2

我假设您不只是在寻找一个 ElementHost 来放置您庞大的 Winforms 应用程序。无论如何,这不是对 WPF 的真正移植。考虑这个线程上的答案从 Winforms 迁移到 WPF 的最大障碍是什么?, 这将非常有帮助。

于 2008-09-22T00:19:05.610 回答
1

有一篇关于将 .NET 2.0 winform 应用程序迁移到 WPF 的非常有趣的白皮书,请参阅向 .NET 3.5 应用程序发展

论文摘要: 在本文中,我将概述在将 Microsoft .NET 应用程序从 1.x/2.x 发展到 3.x 时必须面对的一些思考过程、决策和问题。我将看看我们如何帮助我们的客户采用新技术,同时仍然保持业务可以接受的发布时间表。

于 2008-09-21T19:47:24.937 回答