.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));
}
}