Bestand downloaden met processbar

Status
Niet open voor verdere reacties.

Vliegtuigfan

Gebruiker
Lid geworden
21 feb 2011
Berichten
625
Hoi, ik maak een Update-programma voor mijn 3D-Game.
Ik heb de updater al klaar, version checker enzovoort. Maar tijdens het downloaden van een update, loopt het programma vast. De download gaat gewoon door. Weet iemand hoe ik dit kan oplossen?

Ook zou ik graag een processbar willen installeren. Zo kunnen mensen zien hoelang de download nog duurt.
Alleen ben ik niet zo op de hoogte hoe dit in zijn werk gaat:rolleyes:
Daarom vraag ik het aan jullie!

Ik hoop dat jullie mij verder kunnen helpen!:thumb:
 
Je moet je applicatie multithreaded maken.
Dit wil zeggen dat je de download in een aparte thread laat lopen.

dat kan met deze code:

[CPP]
public class form 1

Dim thread as system.threading.thread

[CPP]Private sub code()
Dim size2 As Integer
Dim wr2 As WebRequest
wr2 = WebRequest.Create("http://download.thinkbroadband.com/200MB.zip")
Dim webr2 As WebResponse = wr2.GetResponse
size2 = webr2.ContentLength
size2 = size2 / 1024
ProgressBar2.Maximum = size2

Label3.Text = size2 / 1024 & "MB"


Dim wc2 As New WebClient
WC.DownloadFile("http://download.thinkbroadband.com/200MB.zip", "file2.zip")

end sub
[/CPP]
private sub button1_click(byval sender as system.object ...... etc. etc.)
thread = new system.threading.thread(addressof code)
end sub

private sub form1_load(byval sender ..... etc. etc.)
me.checkforillegalcrossthreadcalls = false
end sub
End class
[/CPP]

dan moet je vervolgens uitvogelen hoe groot je bestand is (voor de progressbar)
dat kan zo:

[CPP] Dim size2 As Integer
Dim wr2 As WebRequest
wr2 = WebRequest.Create("http://download.thinkbroadband.com/200MB.zip")
Dim webr2 As WebResponse = wr2.GetResponse
size2 = webr2.ContentLength
size2 = size2 / 1024
ProgressBar2.Maximum = size2


[/CPP]

dan kan je eventueel een label ook nog laten vertellen hoegroot de download is met deze code:

[CPP]label1.text = size & "MB"[/CPP]

Vervolgens maak je een timer met een interval van 1 miliseconde en daar zet je de volgende code in:

[CPP]
Try
Dim amount As Integer
If System.IO.File.Exists("file2.zip") Then
Dim o As New System.IO.FileInfo("file2.zip")
amount = o.Length
amount = amount / 1024
Dim amount2 As Integer = amount / 1024
Label4.Text = amount2 & "MB"
ProgressBar2.Value = amount
End If
Catch ex As Exception

End Try
[/CPP]

En als het goed is zal je progressbar nu aangeven hoe ver je download is
 
Laatst bewerkt:
Oke mooi! Het werkt.. Alleen, hoe laat ik hem nu automatisch openen na de download? :)
 
Hmm. Als ik dat van de Processbar toevoeg, krijg ik deze code, een streepje:
thread = new.system.threading.thread(addressof code)
Het streepje staat dan onder new(.)

Wat doe ik fout?
 
Alleen dan zonder haakjes idd


[CPP]thread = new system.threading.thread(AddressOf code)[/CPP]
 
Laatst bewerkt:
Hm... dat script werkt nu wel :D

Maar nu even een domme vraag, hoe start ik hem op... -.- (het download script) (ik heb al een button, maar wat voor script moet er in)
 
dan start je de thread die de code uitvoert :)

(in mijn eerdere bericht deed ik het met een knop genaamd button1)

[CPP]Private sub code()
Dim size2 As Integer
Dim wr2 As WebRequest
wr2 = WebRequest.Create("http://download.thinkbroadband.com/200MB.zip")
Dim webr2 As WebResponse = wr2.GetResponse
size2 = webr2.ContentLength
size2 = size2 / 1024
ProgressBar2.Maximum = size2

Label3.Text = size2 / 1024 & "MB"


Dim wc2 As New WebClient
WC.DownloadFile("http://download.thinkbroadband.com/200MB.zip", "file2.zip")
end sub[/CPP]

en dan zet je dit onder je button:

[CPP]thread = new system.threading.thread(AddressOf code)
thread.Start()
[/CPP]
 
Laatst bewerkt:
Je vergeet de thread te starten:
[CPP]thread.Start()[/CPP]
Dit moet dan direct onder deze lijn:
[CPP]thread = new system.threading.thread(AddressOf code)[/CPP]


Succes!:thumb:
 
@martinJM OMG wat stom :D

Bedankt voor het aangeven. zal het bij mij ook aanpassen.
 
omg... Nu kom er nog niet uit.. iets loopt bij mij niet goed. Ik weet niet precies wat. Rick, zou jij voor mij een Visual basic bestand kunnen maken, met daarin deze code?
 
Tuurlijk wil ik dat wel even doen :D

Het bestand heeft 2 manieren.

Manier 1 is "De simpele" manier (Je hebt geen extra's zoals groote van de file en hoeveel mb heeft ie al binnen)

Manier 2 is de manier die we hier boven hebben gepbrobeert, wel dus met de groote van de file en hoeveel mb die al heeft gedownload.


*klikken om te downloaden*
 
Geweldig! Rick. Heel erg bedankt. Het is helemaal gelukt. De Updater voor mijn game is nu klaar. Helemaal mooi. Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan