我想要使用後臺工作人員爲了從數據庫中檢索大量數據而不會拖延主線程。這似乎工作得很好,除了更新UI時,更新凍結了屏幕。相關代碼如下:C#後臺工作人員用戶界面更新
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lvwTest.BeginUpdate();
lvwTest.Items.Clear();
// Populate the UI
foreach (TestItem ti in testData)
{
ListViewItem lvi = lvwTest.Items.Add(ti.Value1);
lvi.SubItems.Add(ti.Value2);
}
lvwTest.EndUpdate();
}
更新大約需要2-3秒,這段時間屏幕被鎖定。我意識到只有主線程才能更新屏幕,但是有可能以某種方式將此數據加載到內存中(在後臺線程或另一個ListView實例中),然後只顯示它?我想要發生的只是讓程序在不佔用主線程時間的情況下刷新數據。
這是一個WinForm的應用程序 - 但早在VB6的日子裏,是的DoEvents時,因爲它可以皺起眉頭改變事件的順序。 C#中不是這種情況嗎? – 2010-08-05 11:53:19
你可能是對的,從我聽到的內容來看,這仍然是一個黑客。取決於你的應用程序的複雜性。 我已經將我最後一個簡單的應用程序重寫爲WPF,這實際上是一個非常好的框架。 – Remy 2010-08-06 07:18:12