3

我意识到互联网上有很多关于减少 Windows 窗体应用程序闪烁的问题。经过大量实验后,我发现在我的特定情况下的解决方案非常简单:将Control.DoubleBuffered显示闪烁的控件的属性设置为 true。我通过简单地从必要的控制类(在我的例子中是 from ListViewtoDoubleBufferedListView和 from DataGridViewto DoubleBufferedDataGridView)派生来实现这一点。

我正在开发的应用程序的罪魁祸首是它会在对象事件时DataGridView更新其许多单元格。在启用双缓冲之前,网格会在大多数更新中轻微闪烁(不是太糟糕,但足以引起注意)。启用双缓冲后,闪烁消失了。TickWindows.Forms.Timer

但是,我在这里谈论的是我的开发机器。不幸的是,这个应用程序实际上是由最终用户通过远程桌面连接运行的,我从Raymond Chen 的这篇博文中了解到,这意味着我不应该使用双缓冲。

那么,我的问题是:我应该使用什么?Chen 建议在本地机器上的双缓冲方法和远程桌面连接上的传统非双缓冲方法之间切换;但在这种情况下,该应用程序的最终用户仍会遇到闪烁。这简直是​​不可避免的吗?

郑重声明:这不是调用BeginUpdate/ EndUpdate(已经在ListBoxListView控件上执行此操作)或SuspendLayout/ ResumeLayout(已经为控件执行此操作)的简单问题DataGridView,尽管我认为这甚至不是特别重要,因为正如我所说,我'我只是更新某些单元格中的值)。

也许一个无闪烁的远程桌面应用程序根本不可能?

4

1 回答 1

1

在“值得一试”类别中:AllPaintingInWmPaint在控件上设置标志,或按照此处的建议覆盖 OnPaintBackground:http: //alt.pluralsight.com/wiki/default.aspx/Craig/FlickerFreeControlDrawing.html

这将有助于使背景油漆在时间上更接近前景油漆。这将提高它们同时从客户端发送到服务器的机会。

于 2010-03-09T20:52:15.737 回答