У меня есть индикатор загрузки изображения в моем приложении ASP.NET.
В цикле while находится следующий код, в котором я делю длину байтов текущего потока на ожидаемый поток, чтобы получить желаемый прогресс:
if (ExpectedStreamSize.HasValue && _configSize.HasValue)
{
var expected = ExpectedStreamSize + _configSize.Value;
var progress = _stream.ReadPosition / (float) expected;
var limitedProgress = progress > 1 ? 1 : progress;
var epsilon = 0.001;
if (!_lastReportedProgress.HasValue || _lastReportedProgress.Value + epsilon < limitedProgress)
_onProgressChanged?.Invoke(limitedProgress);
_lastReportedProgress = limitedProgress;
LogToFile(limitedProgress); // Logged to see the values
}
Однако я ожидаю значения от 0 to 1
. Так от 0% до 100%.
При отладке я получаю следующие значения:
ExpectedStreamSize.HasValue = true
_configSize.HasValue = 1714
ExpectedStreamSize = 8700000 // 8.7 MB
_configSize.Value = 1714
--> expected: 8701714
_stream.ReadPosition = 1722
expected: 8701714
--> progress = 0.000197892048
Я зарегистрировал значения для LimitedProgress , которые являются следующими:
0,000197892
0,0001981219
0,0001983517
...
0,0004684135
Но мне нужны значения от 0,00019xxxx до 1,0 (чтобы я достиг 100%).
Может кто-нибудь объяснить мне, что я делаю неправильно и как получить правильный статус прогресса?