我已經知道了,更新控制,我可以使用調用操作更新ListView控件從一個線程不是原來的線程在C#
progressBar1.Invoke(new Action(() => { progressBar1.Maximum = 0; }));
但是,只有與控制是指單一數據的屬性工作。現在我有一個線程需要更改列表視圖項目的列表視圖集合,清除它然後用新項目,新文本和圖標圖像進行更新。它們之間有什麼不同,一個整數或一個bool與一個列表,一個數組或一組整數,bool甚至組件,控件的集合進行比較。可我只是簡單的添加
string[] newItemText = {"item1", "item2", ...};
listView1.Invoke(new Action() => {
i = 0;
foreach(var item in listView1.Items)
{
item.Text = newItemText[i];
i++;
}
}));
我可能需要一個解決方案,我的列表視圖,但如果你有一個答案,請解釋清楚爲什麼,以及如何工作,因爲我需要徹底地瞭解它。你也可以在嘗試這種做法時注意到風險。
編輯:問題不在於如何從其他線程更新控件。有關什麼時候和爲什麼需要這樣做而不是那樣的信息技術。而且,我需要知道更新單個數據和更新整個數據集合的不同之處。
_「我可以簡單地添加」_ - - 當你嘗試時發生了什麼?這與你想要的有什麼不同?根本不清楚你真正的問題是什麼。你似乎明白你需要做什麼。所以......那樣做。如果你在做這件事時遇到了一些麻煩,請解釋一下這個問題到底是什麼。提供一個很好的[mcve],準確顯示你所嘗試的內容,以及對代碼的作用和你希望它做什麼的清晰的詳細解釋。 –
如果你有這麼多的UI工作,你需要重新考慮你的設計。 cpu/IO在後臺工作,UI儘可能在UI線程上工作。比複雜的東西更好。看看異步/等待,它應該有所幫助。請參閱http://blog.stephencleary.com/2012/02/async-and-await.html和資源管理器。 –
[如何從C#中的其他線程更新GUI](http:// stackoverflow。com/questions/661561/how-to-update-the-gui-from-another-thread-in-c) – VMAtm