Kirill Rud: я не понял что вы в коде подразумеваете под
"Downloder"... если это
WebClient downloader= new WebClient();
то, у него есть специальный метод для асинхронной загрузки (чтобы не создавать отдельный поток)
// DownloadFile(...) - загрузка в главном потоке
downloader.DownloadFileAsync(new Uri("ввв.сайт.ру"), "C:\\temp.zip"); // - загружает асинхронно в отдельном потоке, т.е. "DATA.SubThread = new Thread(() =>" <- создавать не нужно.
после чего
"Downloder" нужно подписать на эвенты (события).. ниже в примере создаётся два события: во время загрузки и по окончанию загрузки:
private void button1_Click(object sender, EventArgs e) //нажимаем кнопку "загрузить"
{
string url = "http://****.ру.*****1.zip";
WebClient downloader = new WebClient();
downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted); // привязываем эвент когда файл загрузится
downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged); // привязываем эвент когда файл загружается (в процессе)
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip"); // загружаем не блокируя главный поток
}
void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) // событие по которому передается в прогресс бар кол-во процентов загруженной информации
{
progressBar1.Value = e.ProgressPercentage; // progressBar1 - ваш прогресс бар
}
void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) // событие по окончанию загрузки (п.с. как пример, в рабочем варианте использовать MessageBox лучше не стоит, т.к. он блокирует основной поток (форма зависает, пока не нажмёте кнопку "ок")
{
if (e.Error != null)
MessageBox.Show(e.Error.Message);
else
MessageBox.Show("Загружено!!!");
}
усё вроде...