C# WebClient下载文件显示错误的百分比

C# WebClient下载文件显示错误的百分比,c#,webclient,C#,Webclient,我正在使用System.Net.WebClient在我的应用程序中异步下载一个文件。由于某些原因,在某些系统上,百分比计算错误 我的(更新的)下载进度更改事件: WebClient client = new WebClient(); client.DownloadProgressChanged += (_sender, _e) => { double bytesIn = _e.BytesReceived; double totalBytes = _e.TotalBytesT

我正在使用
System.Net.WebClient
在我的应用程序中异步下载一个文件。由于某些原因,在某些系统上,百分比计算错误

我的(更新的)下载进度更改事件:

WebClient client = new WebClient();
client.DownloadProgressChanged += (_sender, _e) => {
    double bytesIn = _e.BytesReceived;
    double totalBytes = _e.TotalBytesToReceive;
    double percentage = bytesIn / totalBytes * 100;
    UpdateConnectingStatus("Missionsdatei wird heruntergeladen... (" + Math.Truncate(percentage).ToString() + "%)");
};
它应该是什么样子(Windows 8.1 64位):

它在某些系统(Windows 7 64位)上的外观:


这可能与操作系统有关吗?还有其他想法吗

更新:我完全删除了分区(
/1000000
),但它在同一个系统上也不起作用

更新2:我检查了totalBytes的值。totalBytes在不工作的系统上的结果是-1。你知道为什么会这样吗


更新3:我仍然没有解决方案,尽管我试图删除字符串转换内容,并在分区中添加一个
.0
。我认为这取决于这个人的网络连接速度慢,而这个人的网络连接不起作用。。我现在只显示百分比(如果为正)

根据一些网络搜索和我的反编译器
TotalByTestOreReceive
可以是-1,前提是下载的大小未知。(是的,这是可怕的API设计。)

-1箱的防护装置:

if (TotalBytesToReceive == -1)
 Print("Download in Progress");
else
 Print(e.ProgressPercent);

目前还不清楚为什么在这台机器上下载的大小是未知的。可能有一个HTTP代理正在删除
内容长度
头,或者web服务器出于某种原因没有发送它。

尝试除以1000000.0(带小数点)。代码可能正在执行整数除法并截断部分结果。奇怪的结果是一个很大的负数,MSB十六进制数为0xFFFFFF。看起来除法给出的是一个整数而不是浮点数。“这可能与操作系统有关吗?”不,这个错误是你的,99.9999999%的确定性。使用调试器查看哪些点的值计算不正确。函数字符串转换的内容可能是问题所在,在任何情况下都应该删除它。如果您显示的只是一个百分比,那么最初为什么要除以
1000000
?为什么要使用
ToString()
然后解析字符串?正确地强制转换或转换它。查看您的更新:也许您应该接受提示并删除野生字符串转换内容。或者,使用调试器检查更多值。查看您最近的编辑:您仍然没有完成要求的操作以及可能的解决方案。你也没有对这些评论作出反应。既然你还在积极寻找解决方案,我真的不明白你为什么拒绝你所要求的帮助。你在给自己造成痛苦。