2012-12-14 16 views
1

我有一個c#Winforms應用程序,它從串口接收數據,然後處理它並顯示在listview上。以毫秒爲單位接收數據時Winforms應用程序掛起

100ms接收數據效果很好,但是當源傳輸速率更改爲10毫秒時,應用程序會在一分鐘或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是不是可以處理數據來的速度?

任何建議爲什麼應用程序掛在那個速度?

回答

2

我期望listview在插入每個項目後重繪自己。如果重繪的時間比插入之間的時間間隔更長,則會掛起。當然,隨着名單日益增長,情況會越來越糟糕。

你也許可以通過累積更新批次並在插入批處理前調用ListView.BeginUpdate()和插入批處理後調用ListView.EndUpdate()來修復它。

+0

'ListView.BeginUpdate()'和'ListView.EndUpdate()'似乎不工作。沒有更新,listview不顯示任何東西 – Liban

3

您應該在另一個Thread,TaskBackgroundWorker中運行您的串行數據接收器。從那裏你不直接填寫你的ListView。相反,您應該將其配置爲使用VirtualMode。有關如何使用VirtualMode的示例可以找到at MSDN

+0

ohw ..這似乎是個好主意,也很複雜。我會盡力去做,謝謝 – Liban