Meerdere file download, backgroundworker, ?

Status
Niet open voor verdere reacties.

That Guy

Meubilair
Lid geworden
28 nov 2006
Berichten
5.010
Yo allen,

Ik ben voor t eerst maar eens bezig met dat hele .NET gebeuren, ging allemaal heel aardig. Maar nu loop ik even vast.

Ik heb (dit werkt allemaal dus: ) een programma dat zich associert met een bepaalde extentie. Dit zijn plain text files met daarin een lijst met adressen. Deze wordt geparst door de parseInput() functie. Ik krijg daarna in een loop dus een x aantal URL's. Werkt allemaal zupah.

Nu wilde ik deze (zijn meestal tussen de 3 en 6 bestanden) allemaal gedownload hebben. Het liefst tegelijkertijd, dus zoiets:
Code:
for i = 0 to aantal


   foo = "http://bla.com/map/bestand_" & i & ".zip"

   var bbq = new BGDownloader
   bbq.download(foo, "C:\..\...\map\bestand.ext")


next i
oid.

Iemand een idee OF dit kan, en zo ja, HOE?



:thumb:
 
Hey

Tuurlijk kan dat :)

Waar zit het probleem precies? De backgroundworker of de code die je erin moet mollen m de files effectief te downloaden (of beide)?

Cheers
BN
 
nou, eigenlijk allebij. Het punt is dat ik niet precies weet hoe dit backgroundworker geval werkt, heb wel wat lopen *****n met deze code: [ http://www.codeproject.com/KB/vb/downloadFileswProgressbar.aspx ] maar blindelings overnemen is niet mijn ding. Het idee was namelijk wel dat je de informatie laat zien (procent vd. download, evt. snelheid. etc zoals op die site staat.)

Also, downloaden ging via system.network.downloadfile ofzo, maar dan loopt je prog dus tijdelijk 'vast', vandaar de BGworker. Dat dacht ik, tenminste.

Het liefst heb ik maar 1 functie (of module-bestand, for that matter) zodat ik een beetje het overzicht houd. En natuurlijk met zo min mogelijk code.


alvast bedankt
 
Laatst bewerkt:
Ja, je hebt gelijk dat je een bgw nodig hebt, en dat artikel op tcp demonstreert het ook, maar wellicht iets complexer dan wat jij nodig hebt.

Wat je best kan doen is een class maken (FileDownloader ofzo), mer daarin een bwg en alles om je download zooi af te handelen, zodat je iets in deze aard kan doen

Code:
class blaat

private urlz() as string
private withevents downloader as new FileDownloader

private sub hierStartJeDeDownloadInJeProg()
downloader.download(urlz)
end sub

private sub downloader_finishedDownloading() handles downloader.finishedDownloading
messagebox.show("download compleet")
end sub

end class

dan heb je daar dus epic weinig code nodig, maar moet je wel die class schrijven. dies ok redelijk simpel als je ff kijkt op msdn hoe je een bgw moet gebruiken.

als je wil schrijf ik die morgen wel ff voor je, lekker klein classje om weer eens wat vb te doen :p

Cheers
BN
 
als je tijd hebt graag natuurlijk, op het moment kan ik niets doen tot en met maandag.

Also, een BGWorker was een control geval dat je op je form moest slepen, vandaar dat ik niet helemaal weet hoe je deze zou kunnen hergebruiken (loop van 6 url's bv.) zonder 6x zo'n ding op je form te slepen.


:thumb:
 
Moet het niet op je form slepen (btw, note dat je je designer code kan zien in initialize component), gwn een bgw withevents declarere is genoeg (zoals ik gedaan heb in bovenstaande code).

ook heb je er (gelukkig!) maar 1 nodig he :p

heel grof gaat het
Code:
sub bgw_dowork
for each file in files
download file
end for each
end sub

maar als je het in een nette class wilt die je heel makkelijk kan gebruiken is het iets meer code natuurlijk :)

Cheers
BN
 
Is er niet van gekomen vandaag (ff zitten flippen op jQuery xD), maar morgen heb je hem :)
 
Super. Ik ben ook een beetje aan t klooien, maar denk niet dat het nog wat wordt :p Also, jQuery is slecht voor je >[
 
Ik ben de code van het artiekel op tcp dat jij poste volledig aan het herschrijven met de volgende verbeteringen:
- FileDownloader class, volledige scheiding van de logische code en de demo dialoog
- Meerdere files downloadbaar in 1x
- Efficienter algoritme
- Veel makkelijk aanpasbaare class via een hele zooi properties
- Makkelijk met interface te integreren door hele zooi events
- Volgt meer conventie en duidelijkere documentatie

Heb al een heel stuk gedaan maar ben nu zelf vastgelopen op enkele multithreading issues, dus kan ff duren voor die volledig af is :p

EDIT:
Why is jQuery bad for me? :/

Cheers
BN
 
nope :( Ben vastgelopen op 1 rot stuk code wat ik niet werkend krijch :confused:

kan nog wel ff duren voordat ik dat heb opgelost...

als je het dringend nodug hebt kan je dus best gewoon de 'nub' oplossing gebruiken en een bwg een sub laten uitvoeren met daarin een loop die al je files download :) (dan moet je gewoon ff zien hoe die webrequest dinges werken en hoe je de file zelf moet aanmaken, redelijk simpel eens je een voorbeelt hebt gezien)
 
nee hoor, neem de tijd.Het heeft geen haast, maar t is altijd leuk als het snel af is ;)


:thumb:
 
Ben terug vanaf 0 begonnen en heb het probleem waar ik op vastgelopen was niet meer (ookal heb ik de fout in mn originele code nog steeds niet :confused:) Als ik niet weer vastloop is die vanaaf klaar :)
 
Yay - na uren werk heb ik terug hetzelfde probleem >_>

Rotte is dat ik het al eens in een andere class heb gehad maar niet meer weet hoe ik het dan gefixed heb :p
 
Heb het nu (lol) - blijkbaar had ik iets verkeerd voor met hoe multithreading werkt :p

Heb al ff mn source geupload
http://code.bn2vs.com/viewtopic.php?mode=attach&id=164

de helft van de dingen werken nog niet of zijn nog niet geimplementeerd, moet nog worden opgeschoont en gedocumenteerd. wat die nu doet is eigenlijk hetzelfde als dat ding op TCP dat jij gepost hebt, maar dan met meerdere files, en in een apparte class :)

Ik werk hier zowiso aan verder tot die deftig werkt, en ga hem dan op TCP posten met een artiekel derbij, dan krijch ik zowiso een hele hoop suggesties over hoe het beter kan :)

EDIT: zit weer ff vast xD
http://social.msdn.microsoft.com/Fo...b/thread/00b0c623-16b1-47dd-9af1-51beae3c9bc5
maar duurt wss niet zo lang :)
 
Laatst bewerkt:
Nieuwe versie geupload
hele zooi dingen gefixed

is zo goed als klaar nu, enkel nog documentatie, wat restructureren en fouten support toevoegen :)

Cheers
 
Laatst bewerkt:
hey, super. Heb m even gechect en t werkt hier top.

:thumb:


[edit] kan je in je documentatie ook vertellen hoe je m precies in een project kan voegen? Ben niet echt pro met .NET :p[/edit]
 
Hey,

Heb nog wat verbeterd en ben nu bijna klaar met documentatie. Daarna ga ik op TCP een artiekel erover schijven (of samen met de kerel van dat artiekel waar dit op gebaseerd is zijn artiekel updaten), en er de nodige uitleg bij zetten.

Als je een class wil gebruiken in je project is dat eigenlijk redelijk simpel. Je kan 2 dingen doen:
1. De file copieren via explorer naar je project waar je hem nodig hebt (de class natuurlijk), in dat project via menu project -> show all files, dan krijch je reachts ook die file te zien, dan er rechts op klikken en include pakken
2. Een nieuwe class file maken in je project met dezelde naam en gwn de code copieren

Als het maar 1 class is kan je even goed 2 doen, anders is het handiger dat je via manier 1 werkt ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan