我正在尝试在Xamarin.Forms应用程序中下载文件(从Azure Blob存储FWIW),基本上使用以下代码
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)上,行为是相同的,并且为iOS选择不同的本机HTTP客户端实现也无济于事。 WebClient
所调用的项目是一个.NET Standard项目,如果这很重要的话。
我没有在线找到有关此行为的任何信息。是否有任何解决方案或变通办法可以使我显示 WebClient 的正确进度?
编辑:
直接从iOS调用代码也无济于事,因此,我不认为这与.NET Standard有关。