1

シリアルポートからデータを受信し、それを処理してlistview.

100 ミリ秒でのデータ受信はうまく機能しますが、送信元の送信レートが 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別の、Taskまたはでシリアル データ レシーバを実行する必要がありますBackgroundWorker。そこからListView直接入力する必要はありません。代わりに、を使用するように構成する必要がありますVirtualMode。の使用方法の例はVirtualModeMSDN にあります。

于 2012-12-14T08:49:56.293 に答える
2

各アイテムが挿入された後、リストビューが再描画されることを期待しています。再描画に挿入の間隔よりも時間がかかる場合は、ハングアップします。もちろん、これはリストが長くなるにつれてますます悪化します。

更新のバッチを蓄積し、バッチを挿入する前にListView.BeginUpdate()を呼び出し、バッチを挿入した後にListView.EndUpdate()を呼び出すことで、おそらく修正できます。

于 2012-12-14T08:45:25.160 に答える