VB.NET - WebClient_ProgressChanged

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    VB.NET - WebClient_ProgressChanged

    Hallo.

    Falls es hier verkehrt ist, bitte Moven!

    Habe mich mal nach einer Zeit wieder an`s Programmieren rangesetzt und hänge derzeit fest.
    Ich will mit einem Webclient Daten herunterladen, was Problemlos klappt.
    Ich möchte das ganze in einer ListView wiedergeben Sprich

    5 Columns erstellt, danach mittels Code soll die Geschwindigkeit, Bytes, etc angezeigt werden. Klappt auch
    aber wenn ich diesen Code in den WebclientProgress_Changed event tuhe, macht er für jeden neuen % oder Bytes eine neue Spalte und das wird dann so endlos lang bis er halt fertig ist. Wie kann ich das alles auf eine Zeile beschränken, wenn Ihr versteht was ich meine anhand meines Codes.

    Ja ich weiß "Form1" etc.... wird geändert ;)

    Hab ein Bild angehangen, wie es aussieht....

    Würd gern wissen, was ich falsch mach.

    Visual Basic-Quellcode

    1. Imports System.Net
    2. Public Class Form2
    3. Public WithEvents WebC As WebClient
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim client As WebClient = New WebClient
    6. AddHandler client.DownloadProgressChanged, AddressOf client_ProgressChanged
    7. AddHandler client.DownloadFileCompleted, AddressOf client_DownloadCompleted
    8. client.DownloadFileAsync(New Uri(TextBox1.Text), IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test100k.db"))
    9. End Sub
    10. Private Sub client_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
    11. Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
    12. Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
    13. Dim percentage As Double = bytesIn / totalBytes * 100
    14. Form1.ToolStripProgressBar1.Value = Int32.Parse(Math.Truncate(percentage).ToString())
    15. Dim dt As DateTime = DateTime.Now
    16. With Form1.ListView1.Items.Add(TextBox1.Text)
    17. .SubItems.Add("0 Bytes")
    18. .SubItems.Add("0 %")
    19. .SubItems.Add(dt.ToString)
    20. .SubItems.Add("0 MB/s")
    21. End With
    22. End Sub
    23. Private Sub client_DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
    24. MessageBox.Show("Download Abgeschlossen")
    25. End Sub
    26. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    27. End Sub
    28. End Class


    Vielen Dank!

    *Topic verschoben*
    Bilder
    • Unbenannt.png

      9,06 kB, 535×265, 49 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Zeile#18: With Form1.ListView1.Items.Add(TextBox1.Text): Was erwartest Du? Du fügst dem ListView immer ne neue Zeile hinzu. Wenn das nicht gewollt ist, schau nach, ob das LV schon ne Zeile hat. Wenn nicht, fügst Du sie hinzu. Und unabhängig davon, änderst Du danach immer die letzte Zeile des LVs mit

    VB.NET-Quellcode

    1. Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems(1).Text = BytesIn
    usw.
    btw. Bitte die VB.Net-CodeTags, nicht VB6.0-CodeTags verwenden.
    ListView? Besser wäre n DGV.
    Und wenn Du schon weißt, dass Form1 innerhalb von Form2 Murks ist, dann mach es doch gleich richtig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Kevios12 schrieb:

    VB.NET-Quellcode

    1. Form1.ToolStripProgressBar1.Value = Int32.Parse(Math.Truncate(percentage).ToString())
    Da krieg ich ja Augenkrebs von.
    =>

    VB.NET-Quellcode

    1. Me.ToolStripProgressBar1.Value = CInt(percentage)
    Und:
    Verstehe dies: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Dein "und" impliziert einen Zusatz. das Problem: Dein Codeverbesserungsvorschlag für den Augenkrebs klappt hier nicht, weil er sich mit dem Code innerhalb von Form2 bewegt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    weil er sich mit dem Code innerhalb von Form2 bewegt
    Und wie sage ich Form1 von Form2 aus, dass da ein Control zu bedienen ist?
    Das ist sogar verbesserungspflichtig. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!