【问题标题】:progress and download big files from internet problem c#从互联网问题c#中进度和下载大文件
【发布时间】:2020-05-01 19:55:24
【问题描述】:

您好,我在使用此代码下载文件时遇到问题。 当我下载像 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 并且看不到进度级别。

【问题讨论】:

标签: c# winforms file download progress-bar


【解决方案1】:

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

如果您想要深入报告(每个文件的进度,而不是每个批次的进度),您有几个选择:

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

这是一件比它应该做的工作要多得多的事情,而且比它看起来更不值得。

【讨论】:

  • “找到一个可以完成这项工作的类,并且实际上有用于进度报告的事件。有些类从不做” 他正在使用的旧类。较新的 HttpClient 没有(直接)...但是我们仍然不知道他的实际问题。我想,不管是什么,都可以在他的方法中解决,我只是不建议尝试。
  • @NOOBYSHARP 我们的问题是,您还没有告诉我们较大文件的实际问题是什么。我们看不到您的屏幕;D 请在问题中添加问题/异常/您面临的任何问题。
  • @NOOBYSHARP 该错误听起来与进度报告完全无关。除非您尝试设置实际上为负的“当前”或“最大值”值?你是如何得到负值的?你从哪里得到这个价值?您是否使用足够大(有符号)的整数来保存这些值?
  • @Christopher 我正在使用 google drive 链接是 gdrive 中的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
相关资源
最近更新 更多