Я создаю загрузчик файлов в wpf, который загружает из списка файлов, переданных ему, и показывает индикатор выполнения для каждой отдельной загрузки .... список может содержать до 1000 файлов.
У меня есть весь код и особенности, но я застрял в одном ... как поставить файлы в очередь. Рассмотрим код ниже:
private bool Download(String url, int i)
{
String FileName = "some location.mp4";
label2.Content = "Downloading : " + ht[current.ToString()].ToString();
progressBar1.Value = 0;
try
{
if (url.Equals(Constants.NotFound))
return false;
if (File.Exists(FileName))
{
current++;
if (current <= total)
Download(ht[current.ToString()].ToString(), current);
else
{
this.WindowState = System.Windows.WindowState.Normal;
MessageBox.Show("Download Finished");
}
return true;
}
wc.DownloadFileAsync(new Uri(url), FileName);
return true;
}
catch
{ return false; }
}
Чтобы захватить полное событие, я написал обработчик завершения события так:
void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
current++;
if (current <= total)
Download(ht[current.ToString()].ToString(), current);
else
{
progressBar1.Value = 100;
label2.Content = "Download Finished.";
label1.Content = "100 %";
this.WindowState = System.Windows.WindowState.Normal;
MessageBox.Show("Download Finished");
}
}
это прекрасно работает, когда ни один из загружаемых файлов уже не существует, но когда файлы уже существуют, тогда функция загрузки становится рекурсивным циклом и не возвращает значение до тех пор, пока не будут возвращены последующие вызовы функций и с учетом тысяч видео, может быть слишком много в памяти.
Таким образом, любой способ избежать этого / преодолеть это или, возможно, другой подход, чем я использую ??
и да, спасибо заранее ....:)