Используйте WebClient для загрузки файлов, есть метод "DownloadFile".
Псевдокод
foreach(var url in listOfStringURLS)
{
WebClient.DownloadFile(url, ".");
updateProgressBar();
}
Это легкая часть! Теперь вам нужно знать, что когда вы используете BackgroundWorker, вы больше не находитесь в GUI-потоке, что означает, что вы не можете обновить ProgressBar без использования Delegate! Проверьте это: " Делегат индикатора выполнения ".
Для .NET 4.0
Возможно, вы захотите распараллелить загрузку! Вы можете легко сделать это с помощью .NET 4.0, заглянув в раздел «Задачи», прочитав этот блог о Paralell Programming . В противном случае, как сказал другой участник, все операции ввода-вывода будут выполняться в 1 потоке, что может быть не так оптимизировано.