J#/C# Update/Aktualisieren von GUI -Thread
-
28-10-2019 - |
Frage
Ich habe eine Funktion, die einfach eine Fortschrittsleiste ausfüllt.
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();
}
}
Ich rufe es aus dem GUI -Thread (kein Multi -Threading) heran und es ist der Zweck, die Stange langsam zu füllen.
Aber es scheint es nicht zu tun, obwohl der Wert erhöht.
Irgendwelche Vorschläge, wie man eine bestimmte Kontrolle oder das gesamte Formular aktualisiert? PS: Wie Sie sehen, hat dies auch nicht funktioniert.
Lösung
Versuchen Sie es zu verwenden
Application.DoEvents();
Nach der Aktualisierung der Fortschrittsleiste.
Mehr auf DoEvents
hier
Andere Tipps
Ihr aktueller Code lässt die Hauptnachrichtenschleife nicht ausführen und blockiert daher alle Nachrichten einschließlich WM_PAINT
Einsen...
Sie sollten das nicht tun, einen Thread verwenden, einen Timer verwenden: Blockieren Sie die Benutzeroberfläche nicht.
Und benutze nicht Application.DoEvents
Es ist eine schlechte Programmierungspraxis und sollte nicht einmal existieren.