2016-04-17 6 views
1

Ich versuche, eine Datei herunterzuladen, die auf megal.nz mit C# gehostet wird. Ich verwende MegaApiClient, aber ich kann nicht verstehen, wie kann ich den Download-Fortschritt mit dieser Funktion erhalten:Wie bekomme ich den Fortschritt einer asynchronen Methode, die einen IProgress <T> Parameter verwendet?

public Task DownloadFileAsync(Uri uri, string outputFile, IProgress<double> progress) 
{ 
    return Task.Run((Action) (() => 
    { 
    if (string.IsNullOrEmpty(outputFile)) 
     throw new ArgumentNullException("outputFile"); 
    using (Stream stream = (Stream) new ProgressionStream(this.Download(uri), progress)) 
     this.SaveStream(stream, outputFile); 
    })); 
} 

Was ich bisher:

var client = new MegaApiClient(); 
     client.LoginAnonymous(); 
     IProgress<double> ze = null; 
     client.DownloadFileAsync(new Uri("https://mega.nz/#!Yo0l2YiQ!hW7Hzqrjlm3-zO31oof_dQ6Wd23YsIT5ZI8v-9Fau2s"), Directory.GetCurrentDirectory() + "\\ze.rar", ze); 

Wie kann ich Fortschritte abrufen?

Antwort

0

Sie müssen Progress<T> erstellen und übergeben, statt null. Die übergebene Progress<T> wird letztendlich von der async-Methode aufgerufen, um den Fortschritt an Sie zurückzumelden.

Eine einzeilige, die den Fortschritt,

Progress<double> ze = new Progress<double>(p => Console.WriteLine($"Progress updated: {p}"); 
client.DownloadFileAsync(new Uri("https://mega.nz/#!Yo0l2YiQ!hW7Hzqrjlm3-zO31oof_dQ6Wd23YsIT5ZI8v-9Fau2s"), Directory.GetCurrentDirectory() + "\\ze.rar", ze); 

Sie auch auf die Progress<T>.ProgressChanged Ereignis in die gleiche Richtung, um die Konsole druckt Änderung hören können.

+0

Es funktioniert, obwohl ich neue Progress tun musste! Vielen Dank! –

+0

Ja, hast du. Das ist, was ich bekomme, um nicht sicher zu sein, dass meine Antwort kompiliert. :) – jdphenix

Verwandte Themen