Имеется приложение, которое выполяет загрузку файлов с сервера с помощью класса WebClient (задача учебная). Для обеспечения мультипоточности используются Thread, ThreadPool, BackgroundWorker, Delegate.BeginInvoke (способ выбирается пользователем). При запуске одновременно могут работать только две загрузки, остальные ждут в очереди. Как увеличить количество исполняемых потоков?
TPL не предлагать :)
public class Download : IManager
{
private Uri uri;
private string file;
public event EventHandler<DownloadInfoEventArgs> AlarmStartedDownload;
public Download(Uri uri, string file)
{
this.uri = uri;
while (true)
{
if (System.IO.File.Exists(file))
{
file += "_";
}
else
{
this.file = file;
break;
}
}
}
public string FileName
{
get { return file; }
}
public void StartDownload()
{
WebClient webClient = new WebClient();
Thread thread = new Thread(()=> webClient.DownloadFileAsync(uri, file)); //запуск потока
thread.Start();
webClient.DownloadProgressChanged += (s, e) => OnAlarmDownloadStarted(e.ProgressPercentage);
}
public virtual void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) //события, не обращайте внимания ;)
{
OnAlarmDownloadStarted(e.ProgressPercentage);
}
public virtual void OnAlarmDownloadStarted(int progress)
{
AlarmStartedDownload.Invoke(this, new DownloadInfoEventArgs(progress));
}
}
Код с другими способами запуска мультипоточности, как вы понимаете, аналогичен.