Download mit Progressbar+Restzeitbestimmen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Download mit Progressbar+Restzeitbestimmen

      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

      Quellcode

      1. Dim Wclient As New WebClient

      sollte es einen fehler geben habt ihr vergessen die system.net zu importieren

      dann in die aufrufsub kommt

      Quellcode

      1. Dim sfd As New SaveFileDialog
      2. sfd.ShowDialog()
      3. Timer1.Start()
      4. w.DownloadFileAsync(New Uri(TextBox1.Text), sfd.FileName)
      5. Timer1.Stop()
      6. MsgBox("Download Complete")

      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

      Quellcode

      1. ByVal e As DownloadProgressChangedEventArgs, ByVal sender As Object

      und als Handle nehm ihr w.DownloadProgressChanged
      also komplett

      Quellcode

      1. Sub Progress(ByVal e As DownloadProgressChangedEventArgs, ByVal sender As Object) Handles w.DownloadProgressChanged

      über diese sub schreibt ihr nun

      Quellcode

      1. Dim a As Uint64
      2. Dim b As Uint64
      3. Dim c As Uint64 = 0
      4. Dim RestTime As Double
      5. Dim drate As Double

      und in die neu erstellte sub kommt nun

      Quellcode

      1. ProgressBar1.Value = e.ProgressPercentage
      2. a = e.BytesReceived
      3. b = e.TotalBytesToReceive

      Wichtig Timer intervall mus eine sekunde sein
      nun zum timer in die timer sub kommt

      Quellcode

      1. c += 1
      2. If a > 5 Then
      3. resttime = (c / a) * (b - a)
      4. drate = (a / c)
      5. End If

      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

      1. Imports System.Net
      2. Public Class Form1
      3. Dim w As New WebClient
      4. Dim a As Long
      5. Dim b As Long
      6. Dim c As Long = 0
      7. Dim resttime As Double
      8. Dim drate As Double
      9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      10. Dim sfd As New SaveFileDialog
      11. sfd.ShowDialog()
      12. Timer1.Start()
      13. w.DownloadFileAsync(New Uri(TextBox1.Text), sfd.FileName)
      14. End Sub
      15. Sub Progress(ByVal e As DownloadProgressChangedEventArgs, ByVal sender As Object) Handles w.DownloadProgressChanged
      16. ProgressBar1.Value = e.ProgressPercentage
      17. a = e.BytesReceived
      18. b = e.TotalBytesToReceive
      19. End Sub
      20. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      21. c += 1
      22. If ProgressBar1.Value > 5 Then
      23. resttime = (c / a) * (b - a)
      24. drate = (a / c)
      25. End If
      26. Me.Text = resttime
      27. End Sub
      28. End Class
      Alles anzeigen
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )