C#后台工作者UI更新

Pau*_*els 5 c# multithreading backgroundworker

我试图使用后台工作程序,以便从数据库中检索大量数据,而不会拖延主线程.这看起来效果很好,除了在更新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();                     
    }
Run Code Online (Sandbox Code Playgroud)

更新大约需要2到3秒,此时屏幕已锁定.我意识到只有主线程可以更新屏幕,但是是否可以以某种方式将这些数据加载到内存中(在后台线程或列表视图的其他实例或其他东西中)然后只显示它?我想要发生的只是让程序简单地刷新数据而不占用主线程中的时间.

Ste*_*ary 1

我建议将数据加载到内存中并使用虚拟模式 ListView。这样,您只需ListViewItem在需要时创建对象。