1

我有 ac# Winforms 应用程序,它从串口接收数据,然后处理它并显示在listview.

以 100ms 接收数据效果很好,但是当源传输速率更改为 10 毫秒时,应用程序会在 1 分钟或 2 分钟后挂起。

细节:

该应用程序以字节为单位接收数据,因此我需要转换为字符串,存储在arraylist中并将其填充到listview列中,操作中涉及的转换很少:

  1. 字节到字符串
  2. 很少将字符串转换为整数。

我也在使用普通的列表视图代码,如下所示:

ListViewItem item = new ListViewItem(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff"));
item.SubItems.Add(hex1.ToString());
item.SubItems.Add(hex2.ToString());

.....

listView1.Items.Add(item);

所以我不确定出了什么问题。是listview无法处理数据到来的速度吗?

任何建议为什么应用程序以这种速度挂起?

4

2 回答 2

3

您应该在另一个Thread或. 从那里你不直接填写你的。相反,您应该将其配置为使用. 可以在 MSDN中找到有关如何使用的示例。TaskBackgroundWorkerListViewVirtualModeVirtualMode

于 2012-12-14T08:49:56.293 回答
2

我希望在插入每个项目后列表视图会重新绘制自身。如果重新绘制的时间比插入之间的间隔时间长,你就会把它挂起来。当然,随着列表变长,这种情况会变得越来越糟。

您也许可以通过累积更新批次来修复它,并在插入批次之前调用 ListView.BeginUpdate() 并在插入批次之后调用 ListView.EndUpdate() 。

于 2012-12-14T08:45:25.160 回答