.NET 4.x DownloadFileAsync завершает цикл - C#

Узнай цену своей работы

Формулировка задачи:

Не могу понять в чем дело. Если запускать не пошагово, то ,после i = [2, 32] (max_count_wallpapers = 1347) цикл завершается, а если пошагово, то все отлично работает. Посоветуйте что-нибудь.
        int max_count_wallpapers;
        int number = 1;
        private void Downloading_Jpeg()
        {
            WebClient Client = new WebClient();
            progressBar.Maximum = max_count_wallpapers;
            while (number < max_count_wallpapers)
            {
                
                Client.DownloadFileCompleted += new AsyncCompletedEventHandler(Client_DownloadFileCompleted);
                Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Client_DownloadProgressChanged);
                Client.DownloadFileAsync(new Uri("http://media.blizzard.com/wow/media/fanart/fanart-" + number.ToString().PadLeft(4, '0') + "-full.jpg"), MainForm.folder_str + "\\fanart-" + number.ToString().PadLeft(4, '0') + "-full.jpg");
                number += 1;
            }
        }
 
        public void Client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            textBox_log.AppendText(" http://media.blizzard.com/wow/media/fanart/fanart-" + number.ToString().PadLeft(4, '0') + "-full.jpg".PadRight(33, '.') + "downloading done!" + Environment.NewLine);
            progressBar.Value = number;
        }
 
        public void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            if (e.ProgressPercentage % 0.4 == 0)textBox_log.AppendText(".");
        }

Решение задачи: «.NET 4.x DownloadFileAsync завершает цикл»

textual
Листинг программы
 int number = 1;       
 
 private void Downloading_Jpeg()
        {
            Parallel.For(0, max_count_wallpapers, i =>
            {
                WebClient Client = new WebClient();
                Client.DownloadFileCompleted += (s,e) => Interlocked.Increment(ref number);
                Client.DownloadProgressChanged += (s,e) => BeginInvoke(() => textBox_log.Text = new string('.', number*100.0/max_count_wallpapers));
                string path = number.ToString().PadLeft(4, '0') + "-full.jpg";
                Client.DownloadFileAsync(new Uri("http://media.blizzard.com/wow/media/fanart/fanart-" + path ), Path.Combine(MainForm.folder_str,path));            
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы