J#/C# Aggiorna/Aggiorna thread GUI
-
28-10-2019 - |
Domanda
Ho una funzione che riempie semplicemente una barra di avanzamento.
private void FillProgressBar(ProgressBar bar, Color c, int percent)
{
int steps = 10;
bar.set_Value(0);
for (int i = 0; i < percent / steps; i++)
{
System.Threading.Thread.Sleep(100);
bar.set_Value((i+1)*10) + bar.get_Value());
this.Refresh();
}
}
Lo evico dal thread GUI (non multi threading) e lo scopo è riempire lentamente la barra.
Ma non sembra farlo, anche se il valore aumenta.
Qualche suggerimento su come aggiornare un controllo specifico o l'intero modulo? PS: Come puoi vedere, questo.refresh () non ha funzionato.
Soluzione
prova a usare
Application.DoEvents();
Dopo aver aggiornato la barra di avanzamento.
più su DoEvents
qui
Altri suggerimenti
Il tuo codice attuale non consente di eseguire il ciclo del messaggio principale e quindi bloccherà tutti i messaggi anche WM_PAINT
quelli...
Non dovresti farlo, usare un thread, usare un timer: non bloccare l'interfaccia utente.
E non usare Application.DoEvents
È una cattiva pratica di programmazione e non dovrebbe nemmeno esistere.