Sto cercando di utilizzare un worker in background per recuperare una grande quantità di dati dal database senza arrestare il thread principale. Questo sembra funzionare bene, tranne che quando si tratta di aggiornare l'interfaccia utente, l'aggiornamento blocca lo schermo. Codice rilevante come segue:C# Aggiornamento dell'interfaccia utente Worker di background
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();
}
L'aggiornamento richiede circa 2 - 3 secondi, per cui lo schermo è bloccato. Mi rendo conto che solo il thread principale può aggiornare lo schermo, ma è possibile caricare questi dati in memoria in qualche modo (in un thread in background o in un'altra istanza di list list o qualcosa del genere) e quindi visualizzarli? Tutto quello che voglio succedere è che il programma aggiorni semplicemente i dati senza occupare tempo nel thread principale.
Si tratta di un'applicazione WinForm - ma nei giorni VB6, DoEvents è stato visto di buon occhio perché potrebbe cambia la sequenza di eventi. Non è questo il caso di C#? –
Potresti avere ragione, è ancora un po 'un trucco da quello che ho sentito. Dipende dalla complessità della tua app. Ho riscritto la mia ultima semplice app in WPF, che in realtà è davvero un bel Quadro. – Remy