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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top