Ich muss den Download-Fortschritt innerhalb der App für eine beliebige Datei bereitstellen. Ich dachte, ich könnte HttpClient.GetInputStreamAsync Fortschritt verwenden, aber es ist nicht feinkörnig. Die Fortschrittsbenachrichtigung wird sehr selten geliefert. Der folgende Code:Windows Store App HttpClient Fortschritt
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);
}
}
Ausgänge:
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
So irgendwann der Zeit die Gesamtzahl der Bytes ist bekannt, zu erhalten aber keine Fortschritte bei der Datei-Download berichtet.
Es macht den Fortschritt berichten, aber es ist auch der gesamte Inhalt in den Speicher zu laden, die ist was ich gerne vermeiden würde. Sorry für die späte Antwort, war beschäftigt. – aguyngueran