@EGGOFFOX

Почему progressBar медленный?

Результат возведения в степень появляется быстрее заполнения ProgressBar
Код:
private long Pow(long number, int power) {
            var result = 1L;
            progressBar1.Maximum = power;
            if (power == 0)
            {
                progressBar1.Maximum = 1;
                progressBar1.Value = 1;
            }
            else
            {
                progressBar1.Value = 0;
                while (power > 0)
                {
                    if ((power & 1) == 0)
                    {
                        number *= number;
                        power >>= 1;
                        progressBar1.Value = progressBar1.Value + power;
                    }
                    else
                    {
                        result *= number;
                        --power;
                        ++progressBar1.Value;
                    }
                }
            }
            return result;
        }
          
        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {
            label3.Text = Pow((long)numericUpDown1.Value, (int)numericUpDown2.Value).ToString();
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            label3.Text = Pow((long)numericUpDown1.Value, (int)numericUpDown2.Value).ToString();
        }
    }
}
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что компонент ProgressBar стилем ОС заполняется плавно. Т.е. не может превышать некоторую штатную скорость заполнения. Даже если ты задашь значение 0, а затем сразу 100, то заполняться он будет почти секунду. Если хочешь показать "реальную" скорость заполнения - нарисуй свой. Например, просто помести пару прямоугольников на форму. Основной - рамка прогрессбара и Внутренний, который будет служить заполнением. Внутреннему прямоугольнику задавай размер исходя из процентов заполнения "прогрессбара".

И совет: прогрессбар всегда должен иметь Максимальный размер значений - 100. Т.е. 100%. Не задавай абсолютные значения пределу и минимуму. Всегда работай с процентами.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
samodum
@samodum
Какой вопрос - такой и ответ
Потому что многопоточности нет. И неправильная работа с UI. UI не обновляется моментально, учи матчасть как это работает.
Ответ написан
Комментировать
@none7
WinForms в принципе штука не быстрая. Попробуйте сократить число установок значения прогрессбара до размера этого контрола в пикселях и не более 10 изменений в секунду.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы