Fortschrittsbalken mit HttpClient
ich habe eine Datei downloader-Funktion:
HttpClientHandler aHandler = new HttpClientHandler();
aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
HttpClient aClient = new HttpClient(aHandler);
aClient.DefaultRequestHeaders.ExpectContinue = false;
HttpResponseMessage response = await aClient.GetAsync(url);
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
//To save downloaded image to local storage
var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
filename, CreationCollisionOption.ReplaceExisting);
var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));
writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await writer.StoreAsync();
//current.image.SetSource(randomAccessStream);
writer.DetachStream();
await fs.FlushAsync();
Wie kann ich erkennen, progress-bar-Funktionalität?
Vielleicht kann ich die Autoren bytes geschrieben werden, so weit? Oder so etwas?
P. S. ich kippe verwenden DownloadOperation(Hintergrund übertragen), weil die Daten vom server anfordert Zertifikat - und diese Funktionalität nicht vorhanden ist DownloadOperations.
Was
Ist Windows.Web.Http.HttpClient auf dem desktop noch? Ich dachte, es war nur für windows store-apps. Die hab ich eigentlich noch nie jemanden gesehen, der nutzen im wirklichen Leben.
Ist Windows.Web.Http.HttpClient verwendet werden können ASP.Net?
Windows.Web.Http.HttpClient
. Dass man unterstützt den Fortschritt.Ist Windows.Web.Http.HttpClient auf dem desktop noch? Ich dachte, es war nur für windows store-apps. Die hab ich eigentlich noch nie jemanden gesehen, der nutzen im wirklichen Leben.
Ist Windows.Web.Http.HttpClient verwendet werden können ASP.Net?
InformationsquelleAutor Cheese | 2013-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der beste Weg zu gehen ist mit
Windows.Web.Http.HttpClient
stattSystem.Net.Http.HttpClient
. Der erste Fortschritt unterstützt.Aber wenn aus irgendeinem Grund, Sie wollen zu bleiben System.Net ein, werden Sie brauchen, um Ihre eigenen Fortschritte.
Entfernen Sie die
DataWriter
entfernen Sie dieInMemoryRandomAccessStream
und hinzufügenHttpCompletionOption.ResponseHeadersRead
zuGetAsync
nennen, so kehrt es so bald als Header erhalten, nicht, wenn die ganze Antwort empfangen wird. I. e.:Warum nicht ProgressMessageHandler msdn.microsoft.com/en-us/library/... ?
ist es möglich, die Fortschritte, wie dies beim Hochladen der Datei über
HttpClient
PostAsync
methos..? weil ich gesehen habe, gibt es keine Methode derPostAsync
zur Verfügung, die nimmtHttpCompletionOption.ResponseHeadersRead
als parameter..! Helfen Sie mir bitte..Könnten Sie
PostAsync
mit einemSystem.Net.Http.StreamContent
. Initialisieren Sie dieStreamContent
mit einem Strom umgesetzt, der durch Sie, und Sie können eine annähernd upload-Fortschritt jeder Zeit Strom.Read() wird aufgerufen, in Ihrem stream, weil Sie wissen, wie viel Daten gelesen wurden.Sollten Sie die Gesamtanzahl der bytes, die von der Suche in der
Content-Length
- header in der Antwort. I. e.:response.Content.Headers.ContentLength
InformationsquelleAutor kiewic
Hier ist eine eigenständige Klasse, die machen den laden, und berichten Sie den Prozentsatz des Fortschritts, basierend auf code aus TheBlueSky auf diese SO beantworten, und eriksendc auf dies GitHub Kommentar.
Verwendung:
Ergebnis:
Hatte zu entfernen, der folgende Stand: if (readCount % 100 == 0)
InformationsquelleAutor René Sackers
Aus .Net 4.5 an: Verwenden Sie
IProgress<T>
Da .Net 4.5, die Sie behandeln können asynchronus Fortschrittsberichte mit der
IProgress<T>
- Schnittstelle. Sie können schreiben, eine extension-Methode für das herunterladen von Dateien mithilfe derHttpClient
genannt werden kann, wie diese, in denenprogress
ist die Umsetzung vonIProgress<float>
für Ihre porgress bar oder anderen UI-Zeugs:Umsetzung
Den code für diese extension-Methode sieht wie folgt aus. Beachten Sie, dass diese Erweiterung hängt eine andere Erweiterung für die Behandlung von asynchronen stream kopieren mit verlaufsdokumentation.
Mit stream-Erweiterung für den wahren Fortschritt der Berichterstellung:
Erstellen Sie die
HttpClient
mit einemHttpClientHandler
mit dem richtigen Zertifikat-Optionen angewendet, wie Sie es in Ihrer FrageInformationsquelleAutor Bruno Zell
Folgende code zeigt ein minimales Beispiel, was getan werden muss, gegen die
HttpClient
- api, um den download-Fortschritt.Oben nicht sagen, wie die Verarbeitung der stream, wie zu berichten, der Prozess, oder versuchen, eine direkte Lösung auf den code in der ursprünglichen Frage. Aber diese Antwort kann mehr zugänglich für zukünftige Leser, die sich bewerben möchten, haben Fortschritte in Ihren code.
InformationsquelleAutor vossad01
gleiche wie @René Sackers Lösung vor, aber die Möglichkeit Hinzugefügt, um den download abzubrechen
InformationsquelleAutor Balage
Hm, Sie könnten einem anderen thread überprüfen Sie die aktuelle Größe des stream geschrieben (Sie hatte auch die zu erwartende Dateigröße) und dann aktualisiert sich der Fortschrittsbalken entsprechend.
Leider habe ich selber kein Win8 kopieren, so kann ich nicht testen Sie Ihre Funktion. Doch, wenn Sie wollen die Dinge lieber einfach können Sie den Dateinamen und die Dateigröße global, haben eine hintergrund-Arbeiter mit einer Schleife und einen thread schlafen überprüfung der Dateigröße auf einer regelmäßigen basis, und die Aktualisierung der Fortschrittsanzeige. Dies ist allerdings eine nicht sehr elegante Lösung.
Ich denke, dass wird nicht funktionieren. Nichts wird in den stream geschrieben, bis
ReadAsByteArrayAsync
gibt.InformationsquelleAutor Rodrigo Silva