Downloadgeschwindigkeit (KB/s) berechnen

    • VB.NET

    Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von MiNdFrReAk.

      Downloadgeschwindigkeit (KB/s) berechnen

      Ein kurzer Code, um beim herunterladen einer Datei via WebClient die Kilobytes pro Sekunde zu berechnen. (Bekannt aus Firefox & Co.)

      VB.NET-Quellcode

      1. Imports System.Net ' Import auf Net
      2. Public Class Form1
      3. Dim WithEvents wc As New WebClient ' Unser WebClient
      4. Dim sw As New Stopwatch ' Stoppuhr
      5. Dim zm As Integer = 0 ' Speichert die "Zwischenmenge"
      6. Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
      7. sw.Stop() ' Stoppuhr anhalten
      8. Label1.Text = Math.Round((e.BytesReceived - zm) / 1024 / (sw.ElapsedMilliseconds / 1000)) & " KB/s" ' Berechnet die Menge
      9. ' Geladene Menge seit der letzten Änderung in Kilobytes umwandeln und durch die Anzahl Sekunden, die seit dem letzten Vorgang verstrichen sind teilen
      10. ProgressBar1.Value = e.ProgressPercentage ' Prozentwert auf die ProgressBar setzen
      11. zm = e.BytesReceived ' "Zwischenmenge" setzen
      12. sw.Restart() ' Stoppuhr neustarten
      13. End Sub
      14. Private Sub wc_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
      15. sw.Stop() ' Wenn die Datei zu Ende geladen wurde, muss die Stoppuhr wieder gestoppt werden
      16. End Sub
      17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      18. sw.Start() ' Stoppuhr starten
      19. wc.DownloadFileAsync(New Uri("Adresse"), "Pfad") ' Datei
      20. End Sub
      21. End Class


      mfg. EiPott
      Sicher

      VB.NET-Quellcode

      1. Dim kb As Integer = Math.Round((e.BytesReceived - zm) / 1024 / (sw.ElapsedMilliseconds / 1000))
      2. Dim einheitKilobytes As Boolean = True
      3. If kb > 999 Then
      4. einheitKilobytes = False
      5. kb = Math.Round(kb / 1024, 2)
      6. End If
      7. If einheitKilobytes Then
      8. Label1.Text = kb & " KB/s"
      9. Else
      10. Label1.Text = kb & " MB/s"
      11. End If

      Hier wird jedoch bei Megabytes auf die zweite Stelle gerundet.
      @Rene8888

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. sw.Start() ' Stoppuhr starten
      3. wc.DownloadFileAsync(New Uri("http://deinedomain.tld"), "pfad/datei.txt") ' Datei
      4. End Sub

      Denk ich mal. Hab sonst nemlich keine andere Angabe zur Datei diereckt gefunden, daher bei Pfad pfad/datei.txt

      VB.NET-Quellcode

      1. Imports System.Net ' Import auf Net
      2. Public Class Form1
      3. Dim WithEvents wc As New WebClient ' Unser WebClient
      4. Dim sw As New Stopwatch ' Stoppuhr
      5. Dim zm As Integer = 0 ' Speichert die "Zwischenmenge"
      6. Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
      7. Dim kb As Integer = Math.Round((e.BytesReceived - zm) / 1024 / (sw.ElapsedMilliseconds / 1000)) Hier leuchtet er Rot "Fehler : Dividiren sie nicht durch null"
      8. Dim einheitKilobytes As Boolean = True
      9. If kb > 999 Then
      10. einheitKilobytes = False
      11. kb = Math.Round(kb / 1024, 2)
      12. End If
      13. If einheitKilobytes Then
      14. Label1.Text = kb & " KB/s"
      15. Else
      16. Label1.Text = kb & " MB/s"
      17. End If
      18. sw.Stop() ' Stoppuhr anhalten
      19. Label1.Text = Math.Round((e.BytesReceived - zm) / 1024 / (sw.ElapsedMilliseconds / 1000)) & " KB/s" ' Berechnet die Menge
      20. ' Geladene Menge seit der letzten Änderung in Kilobytes umwandeln und durch die Anzahl Sekunden, die seit dem letzten Vorgang verstrichen sind teilen
      21. ProgressBar1.Value = e.ProgressPercentage ' Prozentwert auf die ProgressBar setzen
      22. zm = e.BytesReceived ' "Zwischenmenge" setzen
      23. sw.Restart() ' Stoppuhr neustarten
      24. End Sub
      25. Private Sub wc_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
      26. sw.Stop() ' Wenn die Datei zu Ende geladen wurde, muss die Stoppuhr wieder gestoppt werden
      27. End Sub
      28. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      29. sw.Start() ' Stoppuhr starten
      30. wc.DownloadFileAsync(New Uri("http://speedtest.qsc.de/10MB.qsc"), "Pfad") ' Datei
      31. End Sub
      32. End Class


      Hallo zusammen kann mir evllt jemand sagen was ich falsch machen ?
      Bekomme immer die meldung "Dividiren sie nicht durch null" bin noch ein n00by :thumbsup: Aber vielleicht raff ich es ja auch noch :P

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Analyze“ ()

      Vielleicht ist deine Datei zu klein, sodass diese in 0, nix runtergeladen ist und eben die vergangene Zeit noch 0 ist?
      Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat :(
      "Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!

      VB.NET-Quellcode

      1. Dim kb As Integer = Math.Round((e.BytesReceived - zm) / 1024 / (sw.ElapsedMilliseconds / 1000))


      Hinweis für fehlerbehebung = Dividiren sie nicht durch null

      System.OverflowException wurde nicht von Benutzercode behandelt.
      Message=Die arithmetische Operation hat einen Überlauf verursacht.
      Source=WindowsApplication1
      StackTrace:
      bei WindowsApplication1.Form1.wc_DownloadProgressChanged(Object sender, DownloadProgressChangedEventArgs e) in C:\WindowsApplication1\Form1.vb:Zeile 11.
      bei System.Net.WebClient.OnDownloadProgressChanged(DownloadProgressChangedEventArgs e)
      bei System.Net.WebClient.ReportDownloadProgressChanged(Object arg)
      InnerException:


      Hier leuchtet er Gelb nicht rot steht aber oben auch schon im source.Kann man aber nicht so gut lesen sry :thumbsup: