Принуждение ListView к рисованию в фоновом режиме

StackOverflow https://stackoverflow.com/questions/131448

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть ListView, в который иногда мне нужно поместить около 10 000 элементов.ListViews не очень хорошо справляются с этим и блокируются на пару секунд, пока сортируют элементы и рисуют их.Если вы добавляете элементы по отдельности, ситуация еще хуже: зависание почти на минуту.

Чтобы обойти эту проблему, я подумал, что попробую заполнить ListView до того, как мне понадобится его отобразить, но, к сожалению, у него есть другие идеи.Рисование начинается только тогда, когда я поворачиваю панель, содержащую ListView, на видимую, из-за чего программа зависает на пару секунд.

Есть идеи, как устранить эту задержку?Или есть другой относительно простой в использовании компонент, который лучше отображает большие объемы данных?

Это было полезно?

Решение

Вам необходимо использовать Виртуальный режим.

Другие советы

Хорошо.Если вы просто хотите загрузить контент в фоновом режиме, вы можете попробовать поток заполнить ListView, что позволит загрузить форму.

Я не думаю, что вы получите паузу, если поставите Application.DoEvents();при загрузке элементов (что позволяет форме перерисовываться и получать события).

for (int ix=0; ix < 10000; ix ++)
{
 listView1.Items.Add(ix.ToString());
 Application.DoEvents();
}

Думаю, мои предложения хороши, если вы не знаете о VirtualMode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top