J#/c# Обновление/обновление поток графического интерфейса
-
28-10-2019 - |
Вопрос
У меня есть функция, которая просто заполняет панель прогресса.
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
Это плохая практика программирования и даже не должна существует.