Hinzufügen anhalten und fortsetzen Fähigkeit in meinem downloader
Erstelle ich ein downloader in C#. Ich bin mit der WebClient-Klasse. Zum pausieren Download auf einen button klicken konnte ich nur denken, mit Gewinde. Also, wenn ich thread erstellt und befestigt es mit meiner Datei herunterladen und wie unten
WebClient web = new WebLCient();
Thread dwnd_thread = new Thread(Program.web.DownloadFileAsync(new Uri(Program.src), Program.dest));
er gibt mir folgenden Fehler:
"Die beste übereinstimmung für die überladene Methode 'System.Threading.Thread.Thread(System.Threading.ThreadStart)' hat einige ungültige Argumente"
und
"Argument '1': cannot convert from 'void' zu 'System.Threading.ThreadStart'".
Dann dachte ich, wenn ich pause mein system Haupt-thread, dann könnte es blockieren meine gesamte Prozess für Sie, dass ich die folgenden Zeile code
System.Threading.Thread.Sleep(100);
aber es tut sich gar nichts. Kann jemand mir sagen, was wäre ein besserer Ansatz für pause/herunterladen und wie mit thread zu pausieren, meine Download-Prozess.
InformationsquelleAutor | 2013-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da es keine standard-Weg, pause/resume-download anfordern, werden Sie haben, um Ihre eigenen Mechanismus. Unten ist ein code-block, enthaltend ein Beispiel, wie ein solcher Mechanismus Aussehen könnte. Die Klasse
FileDownload
nimmt 3 Parameter:source
- url, um die Datei herunter zu laden.destination
- wo die Datei zu speichern.chunkSize
- wie viele bytes zu Lesen, bevor Sie prüfen, ob zum pausieren oder fortsetzen der download.Verwendung:
Ich habe ein problem, dass dieser ganze code ist implementiert .NET framework 4.0 und ich bin mit .NET framework 2.0. Gibt es eine alternative für Sie?
Anzeigen Fortschritt Teil nicht funktioniert. Jede Hilfe würde geschätzt werden.
Console.Write(string.Format("ContentLength: {0} | BytesWritten: {1}", fw.ContentLength, fw.BytesWritten));
Schöne Umsetzung. Kurze Frage: müsste es nicht Synchronisierung auf die
_allowedToRun
- flag, um zu verhindern, dass das racing?InformationsquelleAutor ebb
leider WebClient hat keine Möglichkeiten, um das herunterladen pausieren. Also müssen Sie WebRequest auf hintergrund-thread und pause getting response stream mit dem flag. Hier ist Beispielcode. Aber stellen Sie sicher, dass Sie nicht anhalten unbegrenzt, da die TCP-Verbindung wird geschlossen, wenn es nichts zu übertragen, für eine Weile. Also, wenn das herunterladen fortzusetzen fehlschlagen, starten Sie das herunterladen erneut.
InformationsquelleAutor Darksanta