Как определить шаги приращения для Progressbar в .NET?

Это кажется тривиальным, но я не могу найти для этого чистый алгоритм.

Я могу рассчитать общее количество строк до 2186.

Затем я подумал, что делаю 2186/100 = 21 (что будет моим modNr). Затем я подумал, что увеличим currentRowNr++ внутри Backgroundworker.reportprocess() и сделаю if(currentRowNr % modNr == 0) увеличив индикатор выполнения.

Индикатор выполнения теперь, кажется, ведет себя правильно, однако он не останавливается на 100. Я получаю ожидание, что число превысило максимальное значение 100. Мой алгоритм кажется неправильным.

Для этого должно быть чистое решение, и я просто усложняю его. Кто-нибудь хорош в математике? ;-)

Спасибо


person Houman    schedule 11.09.2009    source источник


Ответы (2)


Установите для свойства Maximum панели прогресса значение 2186, а для свойства Minimum значение 0. Теперь каждый раз, когда вы проходите один элемент в своей обработке, вы увеличиваете значение индикатора прогресса на 1. Устраняет необходимость в алгоритме вообще, поскольку панель прогресса займет заботиться об этом для вас.

person Kasper Holdum    schedule 11.09.2009
comment
на самом деле, я думаю, что это алгоритм - person Muad'Dib; 11.09.2009
comment
Не совсем, вы просто пользуетесь тем фактом, что в progessbar уже есть алгоритм для решения проблемы. Я полагаю, вы могли бы вызвать набор инструкций для алгоритма. - person Kasper Holdum; 11.09.2009

Понятно: 2121=101*21, а 2142, 2163, 2184 тоже будут >100

Это простая проблема с округлением.
Если вы используете 2186 / 100 + 1 = 22 в качестве modNr, вы получите 99 при последнем попадании. Для сверхточности следуйте ответу Qua и перенастройте индикатор выполнения.

person Henk Holterman    schedule 11.09.2009