【问题标题】:How to double buffer list view in c#. (step by step)如何在 C# 中加倍缓冲区列表视图。 (一步步)
【发布时间】:2013-11-28 17:47:03
【问题描述】:

我正在使用一个列表视图 (listView1),当我将数据填充到其中时它会闪烁(每秒添加 10 行)。

如何启用双缓冲属性使其无闪烁。

请给我一步一步的指示。我是 C# 的新手。

【问题讨论】:

  • 我试过这个。但由于我的填充速度非常快,它冻结了我的应用程序..
  • 你能发布示例代码,以便我们看看发生了什么吗?
  • 我的应用程序连接到外部硬件。硬件将向应用程序发送大量消息(约 100 行/秒)。我正在将其写入 listView。我正在使用相同的代码来启用双缓冲并调用“ListViewHelper.EnableDoubleBuffer(listView1);”检查复选框时。没有双缓冲,应用运行良好,但列表视图闪烁过多。

标签: c# listview doublebuffered


【解决方案1】:

以每秒 100 行的速度,您将需要双缓冲和虚拟模式。

双缓冲需要继承 ListView 并设置 DoubleBuffered 受保护属性。虚拟模式需要将VirtualSize设置为行数,然后响应RetrieveVirtualItem事件。

您应该认真考虑使用 ObjectListView,它是一个围绕 .NET ListView 的开源包装器,可以解决很多问题,因此您不必这样做。

【讨论】:

    【解决方案2】:

    这里的一个选项是仅更新列表视图数据源,这样您就不会直接访问您的控件,而只能访问底层数据源。

    DataTable dt = new DataTable();
    //load the Datatable with items from your external hardware connection.
    myListView.datasource = dt;
    

    然后您只更新 DataTable,而不是控件的项目列表。使用双缓冲,您应该会看到所需的效果。

    最后,每秒 100 个列表视图项目很多,您需要在列表视图中有这么多项目吗?我建议将此列表过滤为仅您当时需要的项目,这会使其性能更好。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多