我经常使用 Visual Studio 2008、.NET C# 2.0-3.5 和 Windows 窗体,我注意到,像我之前的许多人一样,GDI+ 在绘制控件方面非常慢。请注意,我不太会处理图像(JPG、GIF 等)。图像仅在某些地方作为图标。这实际上是绘制缓慢的控件/表单/等。
问题是您可以看到正在绘制的控件,并且可能需要几秒钟才能绘制一组看似简单的控件。即,它的滞后和可怕。
我已经进行了测试,我只是在表单上放置了一些标签(40-50),按 F5 运行并且必须等待它们被绘制。再次,滞后,不是一个很好的体验。
所以,有 WPF 可以解决这个问题,但我/我们还没有准备好迁移到 WPF。所以我四处寻找解决方法或修复程序,我偶然发现了 Direct2D,并且在阅读其他一些库时。
让我有点困惑,因此有这些问题:
1) 首先,我想要的是一种相当简洁的方法,只需用更快和硬件加速的方法替换GDI+。是否可以在不使用 WPF 且无需重写所有 Windows 窗体代码的情况下做到这一点?
每当我在 Direct2D 上阅读任何内容时,我都会看到一长串通常很糟糕的 C++ 代码,告诉我如何手动编写代码以进行绘图。我不要那个。
2) 在网上阅读时,我偶然发现了 SlimDX,但我不知道如何使用它(我承认,我在写作时没有尝试过很多)。假设我已经有一个 GUI 应用程序(Windows 窗体,标准 C# 代码)——我可以以某种方式使用 SlimDX(或类似的东西)来“替换”GDI+ 而无需过多重写吗?
我的问题是我找不到任何示例或类似的东西来告诉我是否可以在我已经创建的 Windows 窗体软件中使用 SlimDX、Direct2D 或其他类似的东西,如果可以的话 - 怎么做。
希望我不要太模糊=)
==编辑== 2010-09-22
我已经在我的真实应用程序中进行了一些测试,并将其中一件缓慢的事情隔离出来:
当我将文本添加到用户控件中的某些标签时,控件会自行调整大小以适应文本。例如,包含 GroupControl 会稍微适应刚刚添加到 Labels 的 .Text-property 的文本的大小。
大约有 10 个标签控件。第一次更新标签并因此更改大小时,整个过程大约需要 500 毫秒。第二次更新标签,大小没有变化,大约需要0毫秒。
==编辑 2== 2010-09-22
发现其中一个减速。然后将字符串添加到 Text-property 如果正在添加的文本的字符串长度与更新前的文本不同,则会很慢。
我正在使用 DevExpress 库,并且可以将 LabelControls 设置为 AutoSizeMode。如果我将其设置为“无”,那么当添加长度与前一个文本不同的文本时,延迟就会消失。我猜这个问题对于普通的标签控件来说是一样的,因为它也有一个 AutoSize = true/false 设置。
然而,它是一种“解决方法”,但仍然证明了我的观点——调整大小时它真的很慢,这很蹩脚。