J # / C # Обновление / Обновление темы GUI - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть функция, которая просто заполняет индикатор выполнения.

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();
    }
}

Я вызываю его из потока графического интерфейса (не многопоточности), и его цель - медленно заполнить бар.

Но, похоже, он этого не делает, хотя значение действительно возрастает.

Есть предложения о том, как обновить определенный элемент управления или всю форму?PS: как видите, this.Refresh () тоже не работал.

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Ваш текущий код не позволяет основному циклу сообщений выполняться, поэтому он блокирует все сообщения, включая WM_PAINT сообщения ...

Вы не должны этого делать, использовать поток, использовать таймер: не блокируйте пользовательский интерфейс.

И не используйте Application.DoEvents, это плохая практика программирования и даже не должно существовать.

1 голос
/ 04 декабря 2011

попробуйте использовать

Application.DoEvents();

После обновления индикатора выполнения.

подробнее о DoEvents здесь

...