Как использовать progress bar если много файлов на загрузку?

259
29 сентября 2017, 15:42

Доброй ночи, подскажите как использовать ProgressBar при загрузке множества файлов. У меня всегда разный список ссылок и программа узнает об этом только тогда, когда я кликну по кнопке. Мне приходит список ссылок и через WebClient я их скачиваю. Я нашел примеры в гугле но там для одного файла. Хотелось, что бы ProgressBar показывал информацию на основании количества файлов которое я качаю.

{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    WebClient clinet;
    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);
                clinet.DownloadFileAsync(uri, Application.StartupPath + "/" + filename);
            });
            thread.Start();
        }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        clinet = new WebClient();
        clinet.DownloadProgressChanged += Clinet_DownloadProgressChanged;
        clinet.DownloadFileCompleted += Clinet_DownloadFileCompleted; 
    }
    private void Clinet_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        MessageBox.Show("Download Complete!!!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    private void Clinet_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        Invoke(new MethodInvoker(delegate ()
        {
            progressBar1.Minimum = 0;
            double receive = double.Parse(e.BytesReceived.ToString());
            double total = double.Parse(e.TotalBytesToReceive.ToString());
            double precentage = receive / total * 100;
            label1.Text = $"Downloaded { string.Format("{0:0.## }", precentage) }%";
            progressBar1.Value = int.Parse(Math.Truncate(precentage).ToString());
        }
        ));
    }
}
}

Соорудил такой вот код, но он качает только если один файл.

READ ALSO
Как узнать какая версия nuget установлена?

Как узнать какая версия nuget установлена?

Как узнать какая версия nuget установлена? Если просто ввести:

446
Зачем в Visual C# свойство Margin?

Зачем в Visual C# свойство Margin?

Зачем в Visual C# (использую Visual Studio 2017) у элементов управления свойство margin если вне зависимости от его значения можно свободно перемещать элементы...

249
Как узнать на каком экране сейчас запущено приложение?

Как узнать на каком экране сейчас запущено приложение?

Есть screensaver, и при запуске он открывает две копии приложения на количество мониторовМне необходимо чтоб некоторые функции на одном из мониторов...

193
Что логировать в методе

Что логировать в методе

У меня есть некий класс-сервисЯ хотел бы обвешать его логами на все случаи жизни

180