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

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


person Ramki    schedule 20.01.2011    source источник
comment
Можете ли вы создать журнал трассировки system.net для этого? См. ferozedaud.blogspot.com/2009/08/tracing-with-systemnet. .html о том, как это сделать. И выложите лог на pastebin.com, а ссылку на лог сюда. Мы можем взглянуть. На первый взгляд это выглядит как ошибка, но лог-файл поможет отладить ее.   -  person feroze    schedule 06.02.2011


Ответы (1)


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

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

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

person Aron    schedule 28.03.2011