прогресс и загрузка больших файлов из задачи inte rnet c# - PullRequest
1 голос
/ 01 мая 2020

Здравствуйте, у меня проблема с использованием этого кода для загрузки файлов. Когда я загружаю небольшие файлы, такие как 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, когда загрузка завершена и уровень прогресса не виден.

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете создавать отчеты о прогрессе только между отдельными строками кода.

Если вы хотите получать подробные отчеты (прогресс за файл, а не прогресс за пакет), у вас есть несколько вариантов:

  • найдите класс, который может выполнять эту работу и на самом деле имеет события для отчетов о ходе работы. Некоторые классы никогда не делают
  • Обратный инжиниринг всего внутреннего l oop процесса загрузки (тот, который содержит фрагменты запроса файла для загрузки)
  • Делайте это как команда Windows Update и понять, что это слишком много работы, чтобы беспокоиться. И не беспокойтесь.

Это одна из тех вещей, которая требует гораздо больше работы, чем она должна быть, и стоит меньше, чем кажется.

...