我想補充項目的大數目的ListBox
首先我定義它抱到了特定
項目對象添加到列表框項集合
這是實現基於任務的異步方法的正確方法嗎?
delegate void D();
然後匿名方法的引用委託我寫異步方法
private async void AddAsync()
{
await Task.Run(() =>
{
for (int i = 0; i < 40000; i++)
{
D r = new D(() => this.listBox1.Items.Add(i));
this.listBox1.Invoke(r);
}
}
);
}
這是實施TAP的正確方法嗎?
我犯了一個錯誤嗎?
從性能的角度來看,你能提出一個更好的邏輯嗎?或者這已經足夠好了
有40,000個項目的列表框?我不確定這是否會飛,但如果堅持我認爲最好創建一個任務,將40,000個項目添加到列表框中,而不是創建40,000個任務,每個任務將單個項目添加到列表框中。 –
哦,我犯了一個大錯,我編輯了方法,謝謝 –
從性能的角度來看,這可能是你能做的最糟糕的事情。正如Martin所說,由於您正在更新必須在UI線程上完成的UI,因此在UI線程的單線程循環中執行此操作會更有效率。在UI環境中,一般來說,當這些長時間運行的操作的結果可用時,您希望將長時間運行的非UI相關**任務轉移到後臺,並且只在UI線程上調用它們,但在更新這種UI時,您最好在主線程中完成,而不是創建40,000個任務來完成它。 – kha