Я пытаюсь использовать фонового рабочего, чтобы получить большой объем данных из базы данных без остановки основного потока. Кажется, это работает хорошо, за исключением того, что когда дело доходит до обновления пользовательского интерфейса, обновление зависает на экране. Соответствующий код следующим образом:
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 секунд, в течение которых экран блокируется. Я понимаю, что только основной поток может обновлять экран, но можно ли каким-то образом загрузить эти данные в память (в фоновом потоке или другом экземпляре списка или что-то еще), а затем просто отобразить их? Все, что я хочу, это чтобы программа просто обновляла данные, не занимая время в основном потоке.