1

データベースからデータのセットを取得してから、ListViewにデータを入力する必要があります。マルチスレッドのフォームコントロールと、ワーカースレッドからコントロールを更新するための適切な手法を理解しています。ジレンマは次のとおりです。

ListViewに数千のエントリがある可能性があります...フォームスレッドを呼び出して一度に1つずつ更新するのではなく、ListViewItemオブジェクトのコレクションを作成し、ListView.Items.AddRange(ListViewItemCollection)を使用したいと思います。

ただし、MSDNのドキュメントでは、独自のListViewItemCollectionを作成しないようにアドバイスされています(実際、独自のListViewItemCollectionを作成しようとすると、親セットがないため、null参照エラーが生成されます)。代わりに、MSは、ListView.Itemsプロパティを介して取得することによってのみListViewItemCollectionを操作することをお勧めします。

もちろん、これは循環論法であり、エラーを生成せずにワーカースレッドから実行することはできません:「クロススレッド操作は無効です:コントロール'ListView'は、作成されたスレッド以外のスレッドからアクセスされました。」

オーバーロードされたAddRange(ListViewItem [])を使用することもできますが、この時代では配列はかなり不格好です。

ワーカースレッドからListViewに数千のアイテムを追加する方法を提案している人はいますか?

4

1 に答える 1

2

私はあなたがすでにあなたの答えを持っていると思います-AddRange(ListViewItem [])。配列に不快感を感じる場合は、Listを使用して、AddRangeを呼び出すときにtoArray()を実行できます。

于 2009-10-11T04:00:32.077 に答える