如何通过远程桌面运行应用程序,获得流畅,无闪烁的GUI?

时间:2010-03-09 20:18:57

标签: .net winforms user-interface remote-desktop flicker

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

我正在处理的应用程序中的主要罪魁祸首是DataGridView,它会更新Tick对象的Windows.Forms.Timer事件中的许多单元格。在启用双缓冲之前,网格会在大多数更新中略微闪烁(不会太糟糕,但足以引人注目)。 启用双缓冲后,闪烁消失了。

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

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

对于记录:只需调用BeginUpdate / EndUpdate(已在ListBoxListView控件上执行此操作)或SuspendLayout / ResumeLayout(已经为DataGridView控件执行了此操作,尽管我认为这甚至不是特别重要,因为正如我所说,我只是更新了某些细胞中的值。)

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

1 个答案:

答案 0 :(得分:1)

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

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