.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)); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д