BackgroundWorkerを使用して私のためにいくつかのデータを収集し、プログレスバーを表示してGUIがフリーズされないようにする間に自分のフォームでListViewを更新しようとしています。 BackgroundWorkerを使用してListViewを更新しようとすると、クロススレッドエラーが発生します。これを克服するために、私はBackgroundWorkerで一時ListViewを作成し、それを結果に代入し、backgroundWorker1_RunWorkerCompletedからそれを使用して、元のListViewを作成します。BackgroundViewerを正しく使用してListViewを更新する方法[c#.NET 3.5]
#1:_RunWorkerCompletedに別の一時的なListViewを作成することなく、ListViewを更新/表示するためのよりエレガントな方法がありますか?
#2:元のリストビューをbackgroundWorkerの引数として渡す方法はありますか?
私はこれに関するフィードバックをお寄せいただきありがとうございます。
ありがとうございます!
擬似コード
// Original ListView in Form
ListView orginalListView = new ListView();
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
ListView backgroundList = new ListView();
foreach(var data in database)
{
listViewItem = data.value;
backgroundList.Items.Add(listViewItem);
}
e.Result = backgroundList;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Can I avoid needing to create a temp LV ??
ListView tempLV = new ListView();
tempLV = (ListView)e.Result;
foreach (ListViewItem item in tempLV.Items)
{
orginalListView .Items.Add((ListViewItem)item.Clone());
}
}
おそらく、呼び出し呼び出しを少し説明します。関連する[link](https://msdn.microsoft.com/en-us/library/zyzhdc6b(v = vs.110).aspx)です。 –
クイックレスポンスと説明リンクをありがとう!私はこの方法が私のために働いたことを確認することができます – AlkiZaganiaris