Как добиться прогресса WebClients в приложении Xamarin.Forms - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь загрузить файл (из хранилища BLOB-объектов Azure) в приложении Xamarin.Forms, в основном со следующим кодом

WebClient client = new WebClient();
client.DownloadProgressChanged += (sender, args) => Debug.WriteLine(args.ProgressPercentage);
await client.DownloadDataTaskAsync(new Uri("https://<storage account>.blob.core.windows.net/<container>/<file>"));

(сокращено до MCVE, код немногосложнее).Файл загружается и вызывается обработчик для WebClient.DownloadProgressChanged, но ProgressPercentage всегда равен 0, пока загрузка не завершена.

Сначала я предположил, что Azure просто не сообщал об общем размере файла, что делало бы поведение полностью приемлемым (действительно неизбежным), но в конце концов я обнаружил, что общий размер файла на самом деле равен сообщили.Использование фрагмента в LinqPad привело к ожидаемому поведению о том, что о прогрессе сообщается правильно.

Поведение является одинаковым для всех платформ, для которых мы разрабатываем (iOS и Android), и выбор другой собственной реализации HTTP-клиента для iOS также не помог.Проект, из которого вызывается WebClient, является проектом .NET Standard, если это имеет какое-либо значение.

Я не нашел ничего об этом поведении в Интернете.Есть ли какое-либо решение или обходной путь, который позволил бы мне отображать правильный прогресс при WebClient ?

РЕДАКТИРОВАТЬ:

Вызов кода напрямуюот iOS тоже не помогает, поэтому я не предполагаю, что это связано с .NET Standard.

...