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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top