我想使用BackgroundWorker來爲我收集一些數據,並在我的窗體中更新ListView,同時我顯示一個進度條並允許gui不被凍結。 當我嘗試使用BackgroundWorker更新我的ListView時,出現跨線程錯誤。爲了克服這個問題,我在BackgroundWorker中填充一個臨時ListView,並將其分配給結果,然後使用來自backgroundWorker1_RunWorkerCompleted的填充來填充我的原始ListView。如何正確使用BackgroundWorker更新ListView? [c#.NET 3.5]
#1:有沒有一種更優雅的方式來更新/顯示我的ListView,而無需在_RunWorkerCompleted中創建另一個臨時ListView?
#2:有沒有辦法將原始listview作爲參數傳遞給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());
}
}
也許可以解釋一下調用調用。這裏有一個相關的[鏈接](https://msdn.microsoft.com/en-us/library/zyzhdc6b(v = vs.110).aspx)。 –
感謝您的快速反應和描述鏈接!我可以確認這種方法對我有用 – AlkiZaganiaris