ProgressBar колеблется из-за загрузки нескольких файлов в С#

Я реализую приложение формы Windows, в котором мы берем URL-адрес в качестве ввода из многострочного текстового поля и с помощью цикла загружаем файлы. В функции загрузки я реализую веб-клиент для загрузки.

Использование цикла создает слишком много запросов Webclient. Теперь, поскольку у меня есть один progressBar, это приводит к колебаниям индикатора выполнения. Вот изображение программы.

введите здесь описание изображения

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

private void Download_Click(object sender, EventArgs e)
    {
        label1.Text = "Starting Download ... Please Wait ...";


        string[] sep = new string[] { "\r\n" };
        string[] lines = textBox1.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < lines.Length; i++)
        {
            download(lines[i]);
        }

    }


    private  void download(string song)
    {

        string name = song;

        song = query(song);
        using (webclient = new WebClient())
        {
            // ...statements
            using (client = new WebClient())
            {
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
                client.DownloadFileAsync(new Uri(DOWN_URL + download_url), @dest + "\\" + name + ".mp3");
            }
        }



    }

    private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        count++;
        label1.Text = "Downloaded " + count.ToString() + " song(s)";
    }

    private void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {

        progressBar1.Value = e.ProgressPercentage;
        label1.Text = "Downloading";
    }

person Yash Bansal    schedule 16.06.2016    source источник
comment
Возможно, вы можете получить размер файла перед загрузкой и используйте DownloadProgressChanged для увеличения уже загруженных байтов   -  person Rubens Farias    schedule 16.06.2016
comment
Но это заставит меня запустить все службы WebClient. Я просто хочу бегать по одному. Загружается несколько файлов.   -  person Yash Bansal    schedule 16.06.2016
comment
Можете ли вы позволить себе DownloadFile вместо асинхронной версии?   -  person Rubens Farias    schedule 16.06.2016
comment
Но разве это не приведет к тому, что наш пользовательский интерфейс перестанет работать.   -  person Yash Bansal    schedule 16.06.2016
comment
Я понимаю; возможно, это путь: stackoverflow.com/a/3015445/113794   -  person Rubens Farias    schedule 16.06.2016
comment
Хорошо, это может помочь. Я бы попробовал.   -  person Yash Bansal    schedule 16.06.2016
comment
Вы по-прежнему можете использовать асинхронную версию, но просто запретите пользователю повторную загрузку, пока текущая загрузка не завершится (или не вызовет ошибку).   -  person ManoDestra    schedule 16.06.2016
comment
Да я получил его. Мне нужно начать загрузку только после выполнения события Download_completed. Кстати, спасибо или ваш ответ.   -  person Yash Bansal    schedule 16.06.2016