private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e, Stopwatch sw)
{
string downloadProgress = e.ProgressPercentage + "%";
string downloadSpeed = string.Format("{0} MB/s", (e.BytesReceived / 1024.0 / 1024.0 / sw.Elapsed.TotalSeconds).ToString("0.00"));
string downloadedMBs = Math.Round(e.BytesReceived / 1024.0 / 1024.0) + " MB";
string totalMBs = Math.Round(e.TotalBytesToReceive / 1024.0 / 1024.0) + " MB";
string progress = $"{downloadedMBs}/{totalMBs} ({downloadProgress}) @ {downloadSpeed}"; // 10 MB / 100 MB (10%) @ 1.23 MB/s
lblDownloadProgress.Text = progress;
textProgressBar1.Value = e.ProgressPercentage;
textProgressBar1.CustomText = progress;
}
我可以通过断点看到e.BytesReceived
和e.TotalBytesToReceive
的变量值正在更改,但在progress变量上,downloadedMBs
和totalMBs
的值始终为0。
编辑:
导致问题的值示例:
第一个月第四个月第一个月:2196
194899年
1条答案
按热度按时间cu6pst1q1#
您为
e.TotalBytesToReceive
(194899)和e.BytesReceived
(2196)报告的值小于1024.0*1024.0==1048576.0的一半。因此当你用1024.0除它们两次
(相当于除以1024.0*1024.0==1048576.0),得到的值小于0.5,使用
Math.Round
进行四舍五入时,给予0。您可以将所有计算保留在
double
s中,或者指定您感兴趣的小数点后的位数,作为Math.Round
的第二个参数。请参阅文件中的。
例如,如果您对小数点后的
3
位数感兴趣,您可以用途:输出量: