Hallo Ich zeige euch mal eine von mir ungeprobte möglichkeit einen download mit progressbar + Restzeitberechnung zu machen
So als erstes was brauchen wir
1. einen Timer
2. Eine Progressbar
3. eine Sub in Der wir den download beginnen
4. Den Import von der System.Net
So also beginnen wir
Als erstes einmal Schreibt ihr über Eine sub aber noch in die classe
sollte es einen fehler geben habt ihr vergessen die system.net zu importieren
dann in die aufrufsub kommt
sfd ist ein savefiledialog da die datei ja auch irgendwo gespeichert werden muss
textbox1.text ist die url
nun erstellt ihr eine neue sub die nennt ihr progress und in die klammern kommt
und als Handle nehm ihr w.DownloadProgressChanged
also komplett
über diese sub schreibt ihr nun
und in die neu erstellte sub kommt nun
Wichtig Timer intervall mus eine sekunde sein
nun zum timer in die timer sub kommt
c ist die anzahl der verstrichenen sekunden
a ist die anzahl der bereits runtergeladenen bytes
b ist die grösse in bytes
(c / a) ist die zeit wie lange ein byte dauert
(b - a) ist die restbyteanzahl
resttimer ist die restliche zeit in sekunden
c+= bedeutet dass eine sekunde verstrichen ist
If a > 5 Then da ihr sonst den divide by Null error bekommt
nun könnt ihr die Variable resttime verwenden
(a / c) die bytes per second
somit kann man auch files vom system kopieren lassen
Mein kompletter code
Alles anzeigen
So als erstes was brauchen wir
1. einen Timer
2. Eine Progressbar
3. eine Sub in Der wir den download beginnen
4. Den Import von der System.Net
So also beginnen wir
Als erstes einmal Schreibt ihr über Eine sub aber noch in die classe
sollte es einen fehler geben habt ihr vergessen die system.net zu importieren
dann in die aufrufsub kommt
sfd ist ein savefiledialog da die datei ja auch irgendwo gespeichert werden muss
textbox1.text ist die url
nun erstellt ihr eine neue sub die nennt ihr progress und in die klammern kommt
und als Handle nehm ihr w.DownloadProgressChanged
also komplett
über diese sub schreibt ihr nun
und in die neu erstellte sub kommt nun
Wichtig Timer intervall mus eine sekunde sein
nun zum timer in die timer sub kommt
c ist die anzahl der verstrichenen sekunden
a ist die anzahl der bereits runtergeladenen bytes
b ist die grösse in bytes
(c / a) ist die zeit wie lange ein byte dauert
(b - a) ist die restbyteanzahl
resttimer ist die restliche zeit in sekunden
c+= bedeutet dass eine sekunde verstrichen ist
If a > 5 Then da ihr sonst den divide by Null error bekommt
nun könnt ihr die Variable resttime verwenden
(a / c) die bytes per second
somit kann man auch files vom system kopieren lassen
Mein kompletter code
Quellcode
- Imports System.Net
- Public Class Form1
- Dim w As New WebClient
- Dim a As Long
- Dim b As Long
- Dim c As Long = 0
- Dim resttime As Double
- Dim drate As Double
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim sfd As New SaveFileDialog
- sfd.ShowDialog()
- Timer1.Start()
- w.DownloadFileAsync(New Uri(TextBox1.Text), sfd.FileName)
- End Sub
- Sub Progress(ByVal e As DownloadProgressChangedEventArgs, ByVal sender As Object) Handles w.DownloadProgressChanged
- ProgressBar1.Value = e.ProgressPercentage
- a = e.BytesReceived
- b = e.TotalBytesToReceive
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- c += 1
- If ProgressBar1.Value > 5 Then
- resttime = (c / a) * (b - a)
- drate = (a / c)
- End If
- Me.Text = resttime
- End Sub
- End Class