У меня есть простой класс:
public class DownloadFile
{
...
public string GetFile(string fileUrl, string pathOut)
{
using (WebClient wc = new WebClient())
{
wc.DownloadFile(new Uri(fileUrl), pathOut);
return pathOut;
}
}
}
, который я вызываю из BackgroundWorker
2 раза, поскольку процесс состоит в том, чтобы загрузить и установить 2 файла (здесь выполняется собственный установщик).
Проблема в том, что первый файл загружается и устанавливается нормально, но 2-й файл зависает в строке wc2.DownloadFile(new Uri(fileUrl), pathOut);
и никогда не выходит оттуда !
с использованием using
IЯ избавляюсь от WebClient
каждый раз, когда использую, так что я могу сказать:
// Created BackgroundWorker so the UI doesn't get blocked and I can
// can show the progress in a log...
BackgroundWorker bkWrk = new BackgroundWorker();
bkWrk.WorkerReportsProgress = true;
bkWrk.ProgressChanged += (s, e) =>
{
ReportProgress(String.Format("Progress: {0}%", e.ProgressPercentage));
};
bkWrk.DoWork = delegate {
DownloadFile fileManager = new DownloadFile();
fileManager.GetFile("http://domain.com/file_A.zip", "C:\\TEMP\\file_a.zip");
fileManager.GetFile("http://domain.com/file_B.zip", "C:\\TEMP\\file_b.zip");
};
bkWrk.RunWorkerAsync();
while(bkWrk.IsBusy)
{
// let's wait but fire all events
Application.DoEvents();
}
Я не вижу здесь никакой проблемы ... но правда в том, что файл зависает на методе DownloadFile
Я даже безуспешно пытался использовать Microsoft Symbols для навигации по методу.
Даже добавил заголовок к запросу, но проблема остается
wc.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)" +
" (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
Я что-то упускаю из видуздесь