Forzando un ListView para dibujar en el fondo
Pregunta
Tengo un ListView que a veces necesito colocar alrededor de 10000 elementos. Los ListViews realmente no manejan esto bien, y se bloquean por un par de segundos mientras ordenan los elementos y los dibujan. Si agrega los elementos individualmente, es aún peor, bloquearlos durante casi un minuto.
Para solucionar esto, pensé que intentaría rellenar el ListView antes de tener que mostrarlo, pero desafortunadamente tiene otras ideas. Solo comienza a dibujar cuando gire el panel que contiene el ListView visible, lo que hace que el programa se cuelgue durante unos segundos.
¿Alguna idea de cómo puedo eliminar este retraso? ¿O hay otro componente que es relativamente fácil de usar y es mejor para mostrar grandes cantidades de datos?
Solución
Debe usar el VirtualMode .
Otros consejos
Bueno. Si solo desea cargar el contenido en segundo plano, puede probar un hilo para rellenar el ListView, que permitirá cargar el formulario.
No creo que obtendrás la pausa si pones una Application.DoEvents (); cuando está cargando los elementos (lo que permite que el formulario se vuelva a dibujar y reciba eventos).
for (int ix=0; ix < 10000; ix ++)
{
listView1.Items.Add(ix.ToString());
Application.DoEvents();
}
Supongo que mis sugerencias son buenas si no estás al tanto de VirtualMode