Hallo,
Ich arbeite gerade an einem kleinen Update-Program für meine Anwendungen (Dank an gfoidl für den ShadowCopy-Beitrag).
Die Verbindung mach ich mit der WebClient-Klasse (bzw. einer Ableitung davon). Um einen ProgressBar anzeigen zu können, wird der Download mit webClient.DownloadFileAsync gestartet.
Das event webClient.DownloadProgressChanged ruft dann meinen EventHandler auf, der mit dem EventArgument e.ProgressPercentage meinen ProgressBar beschreibt.
Das Ganze ist kein Problem, nur dass bei Downloads von FTP (bei passiver Verbindung) die Anzahl der Bytes der Datei nicht bekannt ist (der DownloadProgress ist immer 0).
Die msdn weiss Rat:
http://msdn.microsoft.com/de-de/libr...sschanged.aspx
Mann macht eine neue Klasse, die von WebClient erbt und überschreibt die GetWebRequest methode (keine passiven ftp verbindungen) , den Code kopiert man einfach aus der msdn und verwendet nun MyWebClient;
Leider funktionierts mit dem msdn workaround auch (noch) nicht, das DownloadProgressChanged Event feuert richtig ab, die Anzahl der empfangenen Bytes stimmt, nur die GesamtAnzahl der Bytes im File (TotalBytesToReceive) ist immer (Uint64) -1.
Hat noch jemand eine Idee, wie dem beizukommen ist?
Danke im Voraus.
Gruß,
Uffze
Ich arbeite gerade an einem kleinen Update-Program für meine Anwendungen (Dank an gfoidl für den ShadowCopy-Beitrag).
Die Verbindung mach ich mit der WebClient-Klasse (bzw. einer Ableitung davon). Um einen ProgressBar anzeigen zu können, wird der Download mit webClient.DownloadFileAsync gestartet.
Das event webClient.DownloadProgressChanged ruft dann meinen EventHandler auf, der mit dem EventArgument e.ProgressPercentage meinen ProgressBar beschreibt.
Das Ganze ist kein Problem, nur dass bei Downloads von FTP (bei passiver Verbindung) die Anzahl der Bytes der Datei nicht bekannt ist (der DownloadProgress ist immer 0).
Die msdn weiss Rat:
http://msdn.microsoft.com/de-de/libr...sschanged.aspx
Mann macht eine neue Klasse, die von WebClient erbt und überschreibt die GetWebRequest methode (keine passiven ftp verbindungen) , den Code kopiert man einfach aus der msdn und verwendet nun MyWebClient;
Code:
internal class MyWebClient:WebClient{ protected override WebRequest GetWebRequest(Uri address) { FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address); req.UsePassive = false; return req; } }
Hat noch jemand eine Idee, wie dem beizukommen ist?
Danke im Voraus.
Gruß,
Uffze
Comment