Я хочу загрузить файл во время отображения в пользовательском интерфейсе, который выполняется загрузка. С WebRequest
У меня есть два варианта:Thread.Start (WebRequest.GetResponse) vs. WebRequest.BeginGetResponse
Использование
WebRequest.BeginGetResponse
и связанные с ними методы.Преимущество: возможность отображения точного хода в байтах.
Недостаток: больше кода для написания. Поскольку синхронные и асинхронные методы не смешиваются, мне нужно будет использовать
BeginGetResponse
,BeginRead
,BeginGetRequestStream
. Больше вещей для реализации вручную, включая буферы чтения, тайм-ауты.Создать новую тему (или использовать пул потоков), используйте
WebRequest.GetResponse
и связанные с этим методы.Преимущество: нет лишнего кода.
Недостаток: невозможно показать точный прогресс.
Поскольку файлы, которые нужно скачать, довольно малы, отображение прогресса в байтах является преимуществом, но не критичным. Пропущу что-то, если я использую второй подход, функциональный и эффективный?
Или, может быть, есть более широко распространенная обертка, которую я пропустил? (WebClient
не выставляет WebRequest
, так что это непригодно для меня, потому что мне нужно использовать файлы cookie и т. Д.)
Почему невозможно показать точный прогресс? – 2010-11-28 21:21:56
@HPT Я думаю, что `GetResponse` возвращается только тогда, когда запрос полностью выполнен. Таким образом, это 0%, прежде чем называть его и на 100% после, ни с чем между ними. Я ошибаюсь? – Athari 2010-11-28 21:28:36