【发布时间】:2021-05-31 00:01:36
【问题描述】:
所以,我在 C# winforms 中创建了一个 Web 浏览器,对于下载表单,我需要获取估计的下载时间。我正在使用 System.Net.WebClient 类进行下载。到目前为止的代码如下:
private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Invoke(new MethodInvoker(delegate ()
{
progressBar1.Minimum = 0;
double recieve = double.Parse(e.BytesReceived.ToString());
double total = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = recieve / total * 100;
label7.Text = percentage.ToString() + "% complete";
progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}));
}
【问题讨论】:
-
你不能不下载一些数据。一个 URL 有多个跃点。速率将是连接中最慢的一跳。所以有些跃点可能是 10M,有些是 100M,还有一些在光纤上。
-
可以通过多种方式计算估算值,但您不太清楚您要寻找哪种方法。例如,您可以说
timeTakenSoFar / percentReceived或一些计算最后一秒的下载速度乘以仍然丢失的数据量。考虑到它的波动幅度,估计值是否有用? -
你为什么要在那里调用?该事件在同一个线程上引发,因此现在您在 UI 线程上调用 Invoke()。不要那样做。