进度和下载大文件从互联网问题c



你好,我在使用此代码下载文件时遇到问题。当我下载像jpg或png这样的小文件时,效果很好,但是当我尝试下载像tar、rar或zip这样的大文件时我的进度条有问题。

这是我的代码

WebClient client;
private void button1_Click(object sender, EventArgs e)
{
string url = textBox1.Text;
if (!string.IsNullOrEmpty(url))
{
Thread thread = new Thread(() =>
{
Uri uri = new Uri(url);
string filename = System.IO.Path.GetFileName(uri.AbsolutePath);
client.DownloadFileAsync(uri, Application.StartupPath + "/" + filename);
});
thread.Start();
}
}
and this in form load
client = new WebClient();
client.DownloadProgressChanged += Client_DownloadProgressChanged;
client.DownloadFileCompleted += Client_DownloadFileCompleted;
and this is the operator
private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Invoke(new MethodInvoker(delegate ()
{
progressBar1.Minimum = 0;
double reciverd = double.Parse(e.BytesReceived.ToString());
double total = double.Parse(e.TotalBytesToReceive.ToString());
double precentage = e.ProgressPercentage;
label1.Text = $"Downloaded{string.Format("{0:0##}", precentage)}%";
//progressBar1.Value = int.Parse(Math.Truncate(precentage).ToString());
progressBar1.Value = (int)precentage;

}));
}

已编辑

现在进度条和下载正在工作,但当下载完成时,它会从0直接变为100,并且看不到进度水平。

您只能在离散代码行之间进行进度报告。

如果你想进行深度报告(每个文件的进度,而不是每个批次的进度(,你有几个选项:

  • 找到一个可以完成这项工作的类,并且实际上有用于进度报告的Events。有些从不上课
  • 对下载过程的整个内部循环进行逆向工程(保持请求块文件下载的循环(
  • 像Windows Update团队一样做这件事,并意识到这是太多的工作了。而且不要麻烦

这是一件比它应该做的工作多得多的事情,而它似乎不那么值得做。

最新更新