问题在于您可以看到控件正在被绘制,并且可能需要几秒钟才能绘制一组看似简单的控件。也就是说,它很卡顿,非常糟糕。
我进行了测试,只是将一些标签(40-50)放在一个窗体上,按F5运行并等待它们被绘制。同样,有延迟,不是很好的体验。
因此,有WPF可以解决这个问题,但我们还没有准备好转向WPF。所以我在寻找解决方法或修复方法时,偶然发现了Direct2D,以及其他一些库。
但我有些困惑,因此有以下问题:
1) 首先,我想要的是一种相当简洁而简单的方法,只需用更快和硬件加速的方法替换GDI+。是否可以在不转向WPF且无需重写所有Windows Forms代码的情况下做到这一点?
每当我在Direct2D上阅读任何内容时,我都会看到通常是可怕的C++代码块,告诉我如何手动编写绘图代码。我不想要那个。
2) 在网上阅读时,我偶然发现了SlimDX,但我无法弄清楚如何使用它(我承认,我还没有尝试过)。假设我已经有一个GUI应用程序(Windows Forms,标准C#代码)-我是否可以以某种方式使用SlimDX(或类似的东西)来“替换”GDI+而无需太多重写?
我的问题是,我找不到任何示例或类似的东西,告诉我是否可以在我已经创建的Windows Forms软件中使用SlimDX、Direct2D或其他类似的东西,如果可能的话-如何做到这一点。
希望我没有太模糊 =)
==编辑== 2010-09-22
我在我的真实应用程序中进行了一些测试,并将其中一个缓慢的事情隔离出来:
当我向UserControl中的某些标签添加文本时,控件会调整自身大小以适应文本。例如,包含的GroupControl会根据刚刚添加到标签的.Text属性的文本大小进行适应。有大约10个标签控件。第一次更新标签时,因此大小发生更改,整个过程需要大约500毫秒。第二次更新标签时,没有大小更改,需要大约0毫秒。
==编辑2== 2010-09-22
发现其中一个减速的原因。当将一个字符串添加到文本属性中时,如果被添加的文本与更新前的文本长度不同,则添加操作会很慢。
我正在使用DevExpress库,并且LabelControl可以设置为AutoSizeMode。如果我将其设置为“None”,那么在添加与先前文本长度不同的文本时,延迟就会消失。我猜普通的Label控件也有一个AutoSize = true/false设置,所以这个问题可能是一样的。
然而,这只是一个“变通方法”,但仍然证明了我的观点 - 调整大小时非常缓慢,这相当糟糕。