Принуждение ListView к рисованию в фоновом режиме
Вопрос
У меня есть ListView, в который иногда мне нужно поместить около 10 000 элементов.ListViews не очень хорошо справляются с этим и блокируются на пару секунд, пока сортируют элементы и рисуют их.Если вы добавляете элементы по отдельности, ситуация еще хуже: зависание почти на минуту.
Чтобы обойти эту проблему, я подумал, что попробую заполнить ListView до того, как мне понадобится его отобразить, но, к сожалению, у него есть другие идеи.Рисование начинается только тогда, когда я поворачиваю панель, содержащую ListView, на видимую, из-за чего программа зависает на пару секунд.
Есть идеи, как устранить эту задержку?Или есть другой относительно простой в использовании компонент, который лучше отображает большие объемы данных?
Решение
Вам необходимо использовать Виртуальный режим.
Другие советы
Хорошо.Если вы просто хотите загрузить контент в фоновом режиме, вы можете попробовать поток заполнить ListView, что позволит загрузить форму.
Я не думаю, что вы получите паузу, если поставите Application.DoEvents();при загрузке элементов (что позволяет форме перерисовываться и получать события).
for (int ix=0; ix < 10000; ix ++)
{
listView1.Items.Add(ix.ToString());
Application.DoEvents();
}
Думаю, мои предложения хороши, если вы не знаете о VirtualMode.