Код не может загрузить файл более одного раза - PullRequest
1 голос
/ 10 мая 2011

Каждый раз, когда я нажимаю кнопку в моем графическом интерфейсе, этот код выполняется

this.file_name = @"c:\temp\file_" + DateTime.Now.Ticks / 10000 +".pdf";

client.DownloadFileCompleted +=
                    new AsyncCompletedEventHandler(pdfDownloadComplete);

client.DownloadFileAsync(new Uri(uri), file_name);

Предполагается загрузить файл PDF. Он работает нормально при первом нажатии, но во второй раз он создает пустой файл во временном каталоге и ничего не загружает. Я нажимаю ту же кнопку, после чего ничего нового не происходит.

Я не могу понять, почему он не загрузится более одного раза.

Позже Редактировать

Это полный код, который необходим http://pastie.org/private/y7na2f4fjdu6anzteoa

Я заметил, что если я удаляю загрузку, которая проверяет тип контента, приложение загружает файлы без проблем

client.HeadOnly = true;
byte[] body = client.DownloadData(uri); // note should be 0-length
string type = client.ResponseHeaders["content-type"];
client.HeadOnly = false;

Тем не менее, мне нужно знать, получаю ли я текст файла с этого URL, поэтому мне нужно сделать этот вызов.

1 Ответ

1 голос
/ 10 мая 2011

Ваш код имеет как минимум одну проблему, которая может быть причиной проблемы:
Вы делаете асинхронную загрузку внутри блока using. Я действительно не знаю, что произойдет, если загрузка все еще выполняется, когда область применения блока оставлена, но я предполагаю, что он отменен. Вам следует избегать этой проблемы, используя DownloadFile вместо DownloadFileAsync.
Кроме того, проверьте, работает ли он, когда вы используете обычный класс WebClient, а не класс MyClient.

...