@Lukentui
Vue.JS | Express.JS | Laravel | Flask | Fasthttp

Как визуализировать загрузку через WebClient?

Здравствуйте! Есть отдельный поток, в котором выполняется загрузка файла, так вот, как реализовать отображение всей этой радости? Вот код, который все это выполняет:
private void downloadFiles()
        {
            Thread download = new Thread(() => {
            using (WebClient client = new WebClient()) {
                var webRequest = HttpWebRequest.Create(config.launcherDownloadServer);
                webRequest.Method = "HEAD";

                using (var webResponse = webRequest.GetResponse())
                {
                    var fileSize = webResponse.Headers.Get("Content-Length");
                    var fileSizeInMegaByte = Math.Round(Convert.ToDouble(fileSize) / 1024.0 / 1024.0, 2);

                    Dispatcher.Invoke((Action)delegate () {
                        setAlert($"Загрузка ({fileSizeInMegaByte}mb)"); //ВОТ ТУТ
                    });
                }

                client.DownloadFile(config.launcherDownloadServer, config.launcherFilesTempName);
            }

                DirectoryInfo toDrop = new DirectoryInfo(config.launcherDir);

                foreach (FileInfo file in toDrop.GetFiles())
                {
                    try
                    {
                        file.Delete();
                    } catch {}
                }

                try {
                    ZipFile.ExtractToDirectory(config.launcherFilesTempName, config.launcherDir);
                    File.Delete(config.launcherFilesTempName);
                    root.SetValue("files_downloaded", true);

                    Dispatcher.Invoke((Action)delegate () {
                        setAlert("Запуск, пожалуйста, подождите");
                    });
                } catch {
                }

                start();
            });

            download.Start();
        }


Около комментария "вот тут" нужно выводить текст с % загрузки, пробовал вешать callback, но он не работал, хотя ошибок не выкидывал.

Т.е нужно менять текст в label на что-то типа "Загружено на %".

Заранее всем спасибо!
  • Вопрос задан
  • 256 просмотров
Решения вопроса 3
tomnolane
@tomnolane
профессиональный разработчик
вот тут -> Progress Bar & Thread в C#? я дал хороший ответ на ваш вопрос
Ответ написан
Rou1997
@Rou1997
WebClientиспользовать для скачивания файлов не стоит, он ненадежный, и не дает контроля над процессом, лучше свое решение.
Сядьте и реализуйте его на HttpWebRequest, чтение реализуйте буферизованно, то есть byte[] buf по 1024 байта, как только каждый "кусочек" считан - увеличивается progressBar1.Value.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
15 авг. 2020, в 01:45
95000 руб./за проект
14 авг. 2020, в 22:47
15000 руб./за проект
14 авг. 2020, в 22:40
15000 руб./за проект