我需要在應用程序內提供任意文件的下載進度。 我以爲我可以使用HttpClient.GetInputStreamAsync進度,但它不是很好。進度通知非常罕見。下面的代碼:Windows Store應用程序HttpClient進度
var httpClient = new HttpClient();
var path = new Uri(@"http://<path>");
using (var inputStream = (await httpClient.GetInputStreamAsync(path).AsTask(new MyProgress())).AsStreamForRead())
{
var outputFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("output.mov", CreationCollisionOption.ReplaceExisting);
using (var outputStream = (await outputFile.OpenAsync(FileAccessMode.ReadWrite)).AsStreamForWrite())
{
await inputStream.CopyToAsync(outputStream);
await outputStream.FlushAsync();
}
}
Debug.WriteLine("done");
private class MyProgress : IProgress<HttpProgress>
{
public void Report(HttpProgress value)
{
Debug.WriteLine("HTTP {0} progress {1}/{2}", value.Stage, value.BytesReceived, value.TotalBytesToReceive);
}
}
輸出:
HTTP ResolvingName progress 0/
HTTP ConnectingToServer progress 0/
HTTP SendingHeaders progress 0/
HTTP WaitingForResponse progress 0/
HTTP ReceivingHeaders progress 0/
HTTP ReceivingContent progress 0/109192147
done
所以在時間接收的總字節數是已知的一些點,但沒有文件下載過程中報告進度。
它做報告的進展,但同時也加載的所有內容到內存是我想避免什麼。對不起,遲到了,很忙。 – aguyngueran