C# Winforms应用程序在毫秒级接收数据时挂起

C# Winforms应用程序在毫秒级接收数据时挂起,c#,winforms,listview,freeze,C#,Winforms,Listview,Freeze,我有一个WinC窗体应用程序,它从串行端口接收数据,然后处理数据并显示在listview上 以100ms接收数据效果良好,但当源传输速率更改为10毫秒时,应用程序会在一分钟或两分钟后挂起 详情: 应用程序以字节为单位接收数据,因此我需要将其转换为字符串,存储在arraylist中并将其填充到listview列中,操作中涉及的转换很少: 字节到字符串 很少将字符串转换为整数。 我还使用普通的listview代码,如下所示: ListViewItem item = new ListViewItem(

我有一个WinC窗体应用程序,它从串行端口接收数据,然后处理数据并显示在listview上

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

详情:

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

字节到字符串 很少将字符串转换为整数。 我还使用普通的listview代码,如下所示:

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无法处理数据的传输速率


有什么建议说明为什么应用程序会以这种速度挂起吗?

我希望在插入每个项目后,listview会重新绘制自己。如果重新绘制的时间比插入之间的时间间隔长,则会挂断。当然,随着列表越来越长,情况越来越糟


您可以通过累积更新批次,并在插入批次前调用ListView.BeginUpdate,在插入批次后调用ListView.EndUpdate来修复此问题。

我希望在插入每个项目后,ListView会重新绘制自身。如果重新绘制的时间比插入之间的时间间隔长,则会挂断。当然,随着列表越来越长,情况越来越糟


您可以通过累积更新批次,并在插入批次之前调用ListView.BeginUpdate,在插入批次之后调用ListView.EndUpdate来修复此问题。

您应该在另一个线程、任务或BackgroundWorker中运行串行数据接收器。从这里,您不必直接填充ListView。相反,您应该将其配置为使用VirtualMode。可以找到如何使用VirtualMode的示例。

您应该在其他线程、任务或BackgroundWorker中运行串行数据接收器。从这里,您不必直接填充ListView。相反,您应该将其配置为使用VirtualMode。可以找到如何使用VirtualMode的示例。

ListView.BeginUpdate和ListView.EndUpdate似乎不起作用。根本没有更新,listview不显示任何内容listview.BeginUpdate和listview.EndUpdate似乎不工作。根本没有更新,listview不显示任何内容。。这似乎是个好主意,也很复杂。我会尽力去做的谢谢。。这似乎是个好主意,也很复杂。我会尽力的谢谢