.net - 如何为通过远程桌面运行的应用程序获得流畅、无闪烁的 GUI?

标签 .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 控件这样做了,尽管我认为这并不是特别重要,因为正如我所说,我只是在更新某些单元格中的值)。

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

最佳答案

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

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

关于.net - 如何为通过远程桌面运行的应用程序获得流畅、无闪烁的 GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412247/

相关文章:

c# - 是否有一种流畅的方法来处理 WinForm 事件?

java - 强制 JOptionPane 保持打开状态

java - 当包含在 GridBagLayout 中时,如何使我的面板换行文本并增加高度而不是宽度?

C# 分割逗号分隔值

c# - 从图像中读取字符

c# - 通过反射订阅任何事件类型的 Action

c# - 使用 Ninject 绑定(bind)同一类型的多个版本

c# - 使用 C# 在富文本框中打开文件

c++ - 如何在 Windows 窗体应用程序中删除现有矩形之一

java - 解析从 Arduino 上的多个传感器读取的数据