Я пытаюсь загрузить файл (из хранилища 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.