我意识到互联网上有很多关于减少 Windows 窗体应用程序闪烁的问题。经过大量实验后,我发现在我的特定情况下的解决方案非常简单:将Control.DoubleBuffered
显示闪烁的控件的属性设置为 true。我通过简单地从必要的控制类(在我的例子中是 from ListView
toDoubleBufferedListView
和 from DataGridView
to DoubleBufferedDataGridView
)派生来实现这一点。
我正在开发的应用程序的罪魁祸首是它会在对象事件时DataGridView
更新其许多单元格。在启用双缓冲之前,网格会在大多数更新中轻微闪烁(不是太糟糕,但足以引起注意)。启用双缓冲后,闪烁消失了。Tick
Windows.Forms.Timer
但是,我在这里谈论的是我的开发机器。不幸的是,这个应用程序实际上是由最终用户通过远程桌面连接运行的,我从Raymond Chen 的这篇博文中了解到,这意味着我不应该使用双缓冲。
那么,我的问题是:我应该使用什么?Chen 建议在本地机器上的双缓冲方法和远程桌面连接上的传统非双缓冲方法之间切换;但在这种情况下,该应用程序的最终用户仍会遇到闪烁。这简直是不可避免的吗?
郑重声明:这不是调用BeginUpdate
/ EndUpdate
(已经在ListBox
和ListView
控件上执行此操作)或SuspendLayout
/ ResumeLayout
(已经为控件执行此操作)的简单问题DataGridView
,尽管我认为这甚至不是特别重要,因为正如我所说,我'我只是更新某些单元格中的值)。
也许一个无闪烁的远程桌面应用程序根本不可能?