обнаружение обрывов соединения, когда WebClient загружает файл асинхронно (в C #) - PullRequest
8 голосов
/ 20 января 2011

Я использую метод DownloadFileAsync (в C #) WebClient для асинхронной загрузки файлов. У меня есть обработчики событий, прикрепленные к событиям DownloadProgressChanged и DownloadFileCompleted. Я надеялся получить уведомление о любых ошибках через свойство Error AsyncCompletedEventArgs в обработчике события DownloadFileCompleted. Это хорошо работает, если соединение отсутствует до начала загрузки. Это происходит с надлежащей ошибкой, и я получаю ошибку в свойстве, которое я упомянул выше. Но если соединение обрывается во время загрузки, ничего не происходит. Обработчик события не вызывается, он продолжает ждать вечно. Что я должен сделать, чтобы справиться с таким сценарием? Спасибо.

1 Ответ

7 голосов
/ 29 марта 2011

Лучший способ сделать то, что вы просите, это, вероятно, установить собственный тайм-аут для вызова.

По сути, создайте таймер, который будет сбрасываться каждый раз при возникновении события DownloadProgressChanged. Таким образом, если вы не получите никаких обновлений прогресса в течение вашего периода ожидания, вы можете вызвать команду CancelAsync на WebClient, чтобы не ждать вечно.

Это единственный способ, которым я смог это сделать.

...