WebClient DownloadFile 显示错误的百分比
WebClient DownloadFile displaying wrong percentage
我正在使用 System.Net.WebClient
在我的应用程序中异步下载文件。出于某种原因,在某些系统上百分比计算错误。
我的(更新的)DownloadProgressChanged 事件:
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 位)上的外观:
会不会和OS有关?或者有什么其他想法?
更新:我完全删除了除法 (/ 1000000
),但它在同一系统上都不起作用。
更新 2:我检查了 totalBytes 的值。在它不起作用的系统上,totalBytes 的结果是 -1。任何想法为什么会这样?
更新 3:尽管我尝试删除字符串转换内容并向分区添加 .0
,但我仍然没有解决方案。我认为这取决于该人拥有的慢速互联网连接,它不起作用。我现在只显示百分比,如果它是积极的。
根据一些网络搜索和我的反编译器 TotalBytesToReceive
如果下载的大小(尚)未知,则 TotalBytesToReceive
可以是 -1。 (是的,这是可怕的 API 设计。)
-1 案件的守卫:
if (TotalBytesToReceive == -1)
Print("Download in Progress");
else
Print(e.ProgressPercent);
目前还不清楚为什么不知道那台机器上的下载大小。可能有一个 HTTP 代理删除了 Content-Length
header,或者 Web 服务器由于某种原因没有发送它。
我正在使用 System.Net.WebClient
在我的应用程序中异步下载文件。出于某种原因,在某些系统上百分比计算错误。
我的(更新的)DownloadProgressChanged 事件:
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 位)上的外观:
会不会和OS有关?或者有什么其他想法?
更新:我完全删除了除法 (/ 1000000
),但它在同一系统上都不起作用。
更新 2:我检查了 totalBytes 的值。在它不起作用的系统上,totalBytes 的结果是 -1。任何想法为什么会这样?
更新 3:尽管我尝试删除字符串转换内容并向分区添加 .0
,但我仍然没有解决方案。我认为这取决于该人拥有的慢速互联网连接,它不起作用。我现在只显示百分比,如果它是积极的。
根据一些网络搜索和我的反编译器 TotalBytesToReceive
如果下载的大小(尚)未知,则 TotalBytesToReceive
可以是 -1。 (是的,这是可怕的 API 设计。)
-1 案件的守卫:
if (TotalBytesToReceive == -1)
Print("Download in Progress");
else
Print(e.ProgressPercent);
目前还不清楚为什么不知道那台机器上的下载大小。可能有一个 HTTP 代理删除了 Content-Length
header,或者 Web 服务器由于某种原因没有发送它。