为什么这个WinForms窗口在拖动时渲染工件?

时间:2018-05-11 23:41:40

标签: winforms visual-studio-2015 windows-10 mdi mdichild

我支持用VB.NET编写并使用Visual Studio 2015构建的.NET 4 WinForms应用程序。在Windows 7中,一切都很好,但在我们的Windows 10测试中,表单窗口存在渲染问题在主应用程序窗口中。发生在多台机器上(所有戴尔笔记本电脑)。快速拖动窗体窗口,并在主窗口的顶部或底部边缘(在屏幕截图中以黄色突出显示),导致它变形并留下图形工件,如下所示:

enter image description here

是否有窗口属性或设置可以调整以防止这种情况?

谢谢!

2 个答案:

答案 0 :(得分:1)

重新绘制问题通常归因于主线程可能在某些进程中被锁定而无法重新绘制的事实。您是否在应用程序中使用多线程方法。一个好的起点是检查主线程是否有任何锁定。

答案 1 :(得分:1)

每个WinForms控件都有一个名为DoubleBuffered的属性。旨在减少这种不希望的影响。 启用双缓冲时,渲染操作首先在内存中进行。然后只将最后一个应用于图形设备。更多详情here

默认情况下,表单禁用双缓冲。因此,将表单的DoubleBuffered属性设置为true可以解决问题。

更新

我误读了评论,指出DoubleBuffered已经设置好了。请确保为MDI子窗体和MDI父窗体设置了DoubleBuffered属性。此外,请确保显卡的驱动程序是提供的制造商,而不是默认驱动程序。