【发布时间】:2011-09-28 08:26:41
【问题描述】:
我正在尝试使用后台工作程序从数据库中检索大量数据而不会停止主线程。这似乎运作良好,只是在更新 UI 时,更新会冻结屏幕。相关代码如下:
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 秒,在此期间屏幕被锁定。我意识到只有主线程可以更新屏幕,但是是否可以以某种方式(在后台线程或列表视图的另一个实例中)将此数据加载到内存中,然后显示它?我只想让程序在不占用主线程时间的情况下简单地刷新数据。
【问题讨论】:
标签: c# multithreading backgroundworker