我有几个“自定义控件”的库。基本上,我们有自己的按钮、圆角面板和一些带有自定义绘画的分组框。尽管在 OnPaint 方法中涉及到了一些“数学”运算,但这些控件还是相当标准的。大多数情况下,我们只需要绘制圆角并为背景添加渐变色。我们使用 GDI+ 来完成所有这些操作。
这些控件还可以(根据我们客户的反馈)看起来很漂亮,但是即使启用了双缓冲区,当在同一窗体上有 20 多个按钮(例如)时,你仍然会看到一些重绘,这非常让人不爽。
我很确定我们的按钮并不是地球上最快的东西,但我的问题是:如果启用了双缓冲区,那么所有的重绘都应该在后台进行,Windows 子系统应该“立即”显示结果吧?
另一方面,如果有一个“复杂”的 foreach 循环来创建标签、将它们添加到一个面板中(双缓冲区),并更改它们的属性,则如果在循环之前暂停面板的 SuspendLayout,循环结束后恢复面板的 ResumeLayout,那么所有这些控件(标签和按钮)不应该“几乎瞬间”出现吗?但实际上并非如此,你可以看到面板被填充的过程。
这是为什么呢?我知道没有示例代码很难评估,但复制它也很困难。我可以用相机制作视频,但请相信我,速度很慢 :)