Estoy tratando de utilizar un trabajador de fondo para recuperar una gran cantidad de datos de la base de datos sin detener el hilo principal. Esto parece funcionar bien, excepto que cuando se trata de actualizar la interfaz de usuario, la actualización congela la pantalla. código correspondiente de la siguiente manera:C# Actualización UI de trabajador de fondo
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();
}
La actualización tarda alrededor de 2 - 3 segundos, para los que el tiempo se cerró la pantalla. Me doy cuenta de que solo el hilo principal puede actualizar la pantalla, pero ¿es posible cargar estos datos en la memoria de alguna manera (en un hilo de fondo u otra instancia de una vista de lista o algo así) y luego simplemente mostrarlo? Todo lo que quiero que suceda es que el programa simplemente actualice los datos sin perder tiempo en el hilo principal.
Es una aplicación WinForm - pero en los días de VB6, DoEvents estaba mal visto, ya que podría cambiar la secuencia de eventos. ¿No es ese el caso en C#? –
Puede que tengas razón, sigue siendo un poco complicado por lo que he escuchado. Depende de la complejidad de su aplicación. He reescrito mi última aplicación simple para WPF, que en realidad es un Framework realmente bueno. – Remy