【发布时间】:2019-06-25 09:58:53
【问题描述】:
我的 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%)。
有人可以向我解释我做错了什么以及如何获得正确的进度状态吗?
【问题讨论】:
-
什么是
ReadPosition,它是如何计算的?ExpectedStreamSize + _configSize.Value是否与实际流大小相同? (如果这些值正确,代码看起来很好) -
@JessedeWit 感谢您的努力,我已经注意到我的解决方案。欢迎您对其进行审查。是我的错误。
标签: c# asp.net image stream progress