J#/c# Обновление/обновление поток графического интерфейса

StackOverflow https://stackoverflow.com/questions/8375339

Вопрос

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

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: Как видите, это. Refresh () тоже не сработала.

Это было полезно?

Решение

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

Application.DoEvents();

После обновления панели прогресса.

еще DoEvents здесь

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top