Я столкнулся с тем, что я считаю ошибкой индикатора выполнения в Windows 7. Чтобы продемонстрировать ошибку, я создал приложение WinForm с кнопкой и индикатором выполнения. В дескрипторе кнопки «при нажатии» у меня есть следующий код.
private void buttonGo_Click(object sender, EventArgs e)
{
this.progressBar.Minimum = 0;
this.progressBar.Maximum = 100;
this.buttonGo.Text = "Busy";
this.buttonGo.Update();
for (int i = 0; i <= 100; ++i)
{
this.progressBar.Value = i;
this.Update();
System.Threading.Thread.Sleep(10);
}
this.buttonGo.Text = "Ready";
}
Ожидаемое поведение - индикатор выполнения переместится на 100%, а затем текст кнопки изменится на «Готово». Однако при разработке этого кода в Windows 7 я заметил, что индикатор выполнения вырастет примерно до 75%, а затем текст кнопки изменится на «Готово». Предполагая, что код синхронный, этого не должно происходить!
При дальнейшем тестировании я обнаружил, что тот же самый код, работающий в Windows Server 2003, дает ожидаемые результаты. Кроме того, выбор неавтоматической темы в Windows 7 дает ожидаемые результаты.
На мой взгляд, это похоже на ошибку. Часто бывает очень сложно сделать индикатор выполнения точным, когда длительная операция включает в себя сложный код, но в моем конкретном случае это было очень просто, поэтому я был немного разочарован, когда обнаружил, что элемент управления прогрессом неточно отражает прогресс.
Кто-нибудь еще заметил такое поведение? Кто-нибудь нашел обходной путь?