Скачивание файла с отображением прогресса и скорости загрузки (C#)

Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Всем привет! Искал я на просторах интернета полезной информации по шарпу, и набрел на
Пожалуйста, авторизуйтесь для просмотра ссылки.
тему (noad, really) с немного сломанным кодом (хотя скорее похоже на пастинг) реализации показа прогресса скачивания файла из интернета и самой скорости. Поскольку, у меня пока нет идей для +/- крупных статей, я буду выкладывать интересные фичи из интернета для ваших программ на C#.
Итак, вот сам код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Net;

namespace TestDownload
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        System.Net.WebClient webClient = new System.Net.WebClient();
        Stopwatch sw = new Stopwatch();
        void webClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
        {
            try
            {
                if (labelX1.Text != (Convert.ToDouble(e.BytesReceived) / 1024 / sw.Elapsed.TotalSeconds).ToString("0"))
                    labelX2.Text = (Convert.ToDouble(e.BytesReceived) / 1024 / sw.Elapsed.TotalSeconds).ToString("0.00") + " КБ/с";

                if (progressBarX1.Value != e.ProgressPercentage)
                    progressBarX1.Value = e.ProgressPercentage;

                if (labelX1.Text != e.ProgressPercentage.ToString() + "%")
                    labelX1.Text = e.ProgressPercentage.ToString() + "%";

                labelX3.Text = (Convert.ToDouble(e.BytesReceived) / 1024 / 1024).ToString("0,00") + " МБ" + "  /  " + (Convert.ToDouble(e.TotalBytesToReceive) / 1024 / 1024).ToString("0.00") + " МБ";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void webClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            MessageBox.Show(this, "Загрузка завершена", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
            progressBarX1.Value = 100;
            labelX1.Text = "Загрузка завершена";
        }

        private void button_skacat_Click(object sender, EventArgs e)
        {
            Uri uri = new Uri(" "); // Замените на свой uri файла
            webClient.DownloadFileAsync(uri, @" "); // Замените на свой путь для скачивания файла
            webClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
            webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            sw.Start();
        }
    }
// Также нужно заменить все элементы формы на свои
}
Credits: некий Aison с другого форума
P.S.: также прошу присылать свои найденные интересные фичи для C# или C++ мне в ВК или Телеграм
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
27 Сен 2018
Сообщения
1,312
Реакции[?]
456
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Можно придавать после совершения какого либо действия прогресс бару определенное значение, где плюсы? - можно узнать какая часть кода не проходит ;)
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Можно придавать после совершения какого либо действия прогресс бару определенное значение, где плюсы? - можно узнать какая часть кода не проходит ;)
Это уместнее использовать при привязке ProgressBar к нескольким операциям (скачивание, инжект и т.д.), но если код не кривой, определение проблемной части кода не понадобится, это будет ненужным костылем
 
Забаненный
Статус
Оффлайн
Регистрация
27 Сен 2018
Сообщения
1,312
Реакции[?]
456
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это уместнее использовать при привязке ProgressBar к нескольким операциям (скачивание, инжект и т.д.), но если код не кривой, определение проблемной части кода не понадобится, это будет ненужным костылем
Ну не обязательно иметь ввиду, что код кривой. Может быть у юзера не проходит какая-то его часть.
 
Сверху Снизу