Ich lade mit 3 WebClienten (WebClient1.DownloadFileAsync) gleichzeitig 3 Datein runter.
Wie warte ich bis alle Downloads abgeschlossen sind also ala:
If download(1,2,3).ready then
...
=)
Danke schoneinmal im Vorraus xD
"Async" und "Warten" passt irgendwie nicht zusammen oder?
Ist ja als wenn man im Hotel den Weckservice beaufragt und sich dann die ganze Nacht neben das Telefon setzt, um ja nicht zu verpassen, wenn es klingelt.
OK ich glaube du hast mich falsch verstanden =)
Was meine 3 WebClienten machen:
Dim uri1 As New Uri("http//:meineseite.de/datei.dat")
WebClient1.DownloadFileAsync(uri1, "C:\Users\Markus\Desktop\Datein\datei.dat")
Dim uri2 As New Uri("http//:www.meineseite.de/datei2.dat")
WebClient2.DownloadFileAsync(uri2, "C:\Users\Markus\Desktop\Datein\datei2.dat")
Dim uri3 As New Uri("http//:www.meineseite.de/datei3.dat")
WebClient3.DownloadFileAsync(uri3, "C:\Users\Markus\Desktop\Datein\datei3.dat")
so und wenn die 3 ihr Arbeit gerledigt haben ja erst dann soll es weiter gehen ... =)
Die 3 laden ja alles von der selben Uri runter... oO
nene nur n Fehler beim übertragen xD
WithEvents deklarieren und Event "DownloadFileCompleted" benutzen?
DU weist doch wie groß die datei ist!
Das erfrage doch einfach per IF ob datei die volle größe hat!
also mit DownloadFileCompleted hab ich es schon versucht hat aber immer nicht richtig funktioniert....
Wie würde der Code aussehen um abzufragen ob alle fertig sind?
_________
ne das isses ja ich weiß nicht wie groß die datei ist das ändert sich ja =)
Edit by Agent: Keine Doppelposts! Es gibt eine Bearbeitenfunktion!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()
sicher! Du kanst es ja vom sever erfragen wie groß die datei ist! Und den wert mit der datei auf der festplatte vergleichen!
Wie denn wenn er 3 datein gleichzeitig downloaden will und jede datei unterschiedliche größen hat und unterschiedliche zeiten zum downloaden hat ?!
VB.NET-Quellcode
If datei1.Size >= diegröße1 Then
If datei2.Size >= diegröße2 Then
If datei3.Size >= diegröße3 Then
' Das was pasieren soll!
EndIf
EndIf
EndIf
Die Lösung ist ABSOLUTER MIST! Benutz das dafür vorgesehene Event und nicht so einen Grusel-Code, so was schlimmes hab ich ja noch nie gesehen Ô.ô
VB.NET-Quellcode
Sub DownloadFinished(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles client.DownloadFileCompleted
WithEvents deklarieren und Event "DownloadFileCompleted" benutzen?
Was spricht gegen diese Lösung?
Edit: kevin89 war schneller
na weil ich doch mit dem code
Quellcode
Sub DownloadFinished(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles client.DownloadFileCompleted
' hier kannst du was machen
End Sub
nur den status von einem webclienten rausfinde oder? Aber ich brauche doch alle 3 =)
Oder verstehe ich da was falsch?
Schon richtig, in dem Fall kannst du einfach für "client" den Namen der drei jeweiligen Withevents deklarierten Webclients nehmen, zudem sollten die Subs natürlich unterschiedlich heißen (zb DownloadFile1Completed, DownloadFile2Completed usw) oder du könntest das ganze in einem Sub zusammenfassen
jaja schon aber dann wird doch etwas ausgeführt wenn der jeweilige webclient fertig ist mit downloaden ... wie warte ich bis alle fertig sind?
Danke für deine Geduld xD
Du hast alles was du brauchst... den Rest wirst du doch selber schaffen...
Indem du für jeden Download z.B. eine Variable anlegst, die du beim Beenden des Downloads änderst. Wenn alle drei geändert sind, sind alle drei Downloads fertig.
Wenn alle drei geändert sind, ...
Naja, ich würde eine modulweit deklarierte Zählervariable empfehlen mit Startwert 0, die bei jedem DownloadCompleted um eins erhöht wird, woraufhin abgefragt wird, ob Variable = 3. Wenn ja, alles fertig, wenn nein, einfach fortfahren. Drei verschedene Variablen sind hier ja nicht zwingend nowendig. Und wie gesagt - das alles in einem Sub zusammengefasst.
@kevin89
Ich wollte meine Antwort für den Threadersteller einfach halten. Wenn einer der Downloads scheitert, hilft die Zählervariable nicht viel. Aber für das hier angegebene Problem ist eine Var die sauberere Lösung