WebClient - DownloadProgressChanged (Progressbar ändert sich nicht und Wert springt direkt auf 100%)

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von OneWorld.

    WebClient - DownloadProgressChanged (Progressbar ändert sich nicht und Wert springt direkt auf 100%)

    Hallo

    Ich habe ein Problem mit meinen WebClient .. Im DownloadProgressChanged-Event habe ich ..:

    VB.NET-Quellcode

    1. Me.Progressbar1.Value = e.ProgressPercentage

    reingeschrieben, aber es tut sich nichts in der Progressbar ..

    Um zu sehen ob es an der Progressbar liegt habe ich ein Label erstellt und das selbe mit Label.text gemacht, aber auch bei Label.Text, bleibt der Wert bei 0, die Datei wird aber ordnungsgemäß runtergeladen und mir wird auch durch "DownloadFileCompleted" gemeldet das die Datei erfolgreich runtergeladen wurde.

    Wieso geht das nicht? ?(

    (Edit, vergessen: Wenn ich die Meldung "Datei erfolgreich runtergeladen" bekomme, springt der Wert des Labels oder der Progressbar direkt auf 100%)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Dancger hat recht.Wenn du nicht DownloadAsync machst bleibt ja die GUI hängen und dann kann sich die Progressbar nicht füllen
    Youtube Info Library 2013 jetzt im Showroom.
    DownloadProgressChanged:

    VB.NET-Quellcode

    1. Private Sub WebClient_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles WebClient.DownloadProgressChanged
    2. Me.Label1.Text = e.ProgressPercentage
    3. End Sub


    Download:

    VB.NET-Quellcode

    1. WebClient.DownloadFileAsync(New Uri("ftp://Datei.exe"), Desktop & "\Datei.exe")


    DownloadProgressChanged:

    VB.NET-Quellcode

    1. Private Sub WebClient_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles WebClient.DownloadProgressChanged
    2. Me.Label1.Text = e.ProgressPercentage
    3. End Sub
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

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

    Mach mal Option Strict On denn e.ProgressPercentage ist eine Zahl und kein String ;)

    [EDIT]: Und zudem müsste es so heißen:

    VB.NET-Quellcode

    1. Private Sub Webclient_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles Webclient.DownloadProgressChanged
    2. End Sub
    3. ' also nicht so:
    4. Handles WebClient_Update.DownloadProgressChanged
    Youtube Info Library 2013 jetzt im Showroom.

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

    Du erstellt dir eine Instanz des Webclients (WebClient_Update) aber lädst ohne runter (WebClient) ?!?

    Edit: To Late.

    Lösung:

    VB.NET-Quellcode

    1. WebClient.DownloadFileAsync(New Uri("ftp://Datei.exe"), Desktop & "\Datei.exe")

    wird zu

    VB.NET-Quellcode

    1. WebClient_Update.DownloadFileAsync(New Uri("ftp://Datei.exe"), Desktop & "\Datei.exe")


    Greez
    Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    VincentTB schrieb:

    Du weißt aber, dass du einen anderen webclient startest als den, der mit der prozedur verknüpft ist?!

    Ach so, ist schon der richtige, Ich habe hier im Forum nur den Code nach bearbeitet.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Alles vollständig da und die Pfade stimmen auch, aber eine Frage, wie kann es sein, das obwohl ich einen identisch gleichen Code habe, er bei mir nicht funktioniert aber bei dem Typ im Video was ich mir grade angeschaut habe?

    youtube.com/watch?v=5d9dyV_HwmA
    Da geht es auch ohne weiteres .. ?
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Kann es vielleicht sein, dass die Datei winzig ist? Schreib mal folgendes:

    VB.NET-Quellcode

    1. WebClient.Proxy = Nothing

    (bevor du downloadest)

    Wenn die Datei sofort da ist, ging es halt ziemlich schnell :)
    Mfg
    Vincent

    Was ich noch merkwürdig finde ist, mit e.BytesReceived zeigt er mir an wie viele Bytes ich bereits runtergeladen habe.

    VB.NET-Quellcode

    1. Private Sub Update_Function()
    2. Internet_Connection()
    3. WebClient_Update.Credentials = New Net.NetworkCredential(" - - - ", "- - -")
    4. Dim Version As String = WebClient_Update.DownloadString(" Datei.txt ")
    5. Version = CInt(Version)
    6. If Version > CInt(Label11.Text) Then
    7. If My.Settings.CheckBox11 = True Then
    8. My.Computer.Audio.Play("C:\Windows\Media\Windows Error.wav")
    9. End If
    10. If My.Settings.CheckBox19 = True Then
    11. Dim Result = MessageBox.Show("Update runterladen?", "", Windows.Forms.MessageBoxButtons.YesNo, Windows.Forms.MessageBoxIcon.Information)
    12. If Result = DialogResult.Yes Then
    13. MessageBox.Show("Bitte habe etwas geduld.", "", Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Information)
    14. 'WebClient_Update.DownloadFileAsync(New Uri(" Datei.exe "), Application.StartupPath & "\Datei.exe")
    15. WebClient_Update.DownloadFile(New Uri(" Datei.exe "), Application.StartupPath & "\Datei.exe")
    16. ElseIf Result = DialogResult.No Then
    17. End If
    18. End If
    19. Else
    20. End If
    21. End Sub
    22. Private Sub WebClient_Update_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles WebClient_Update.DownloadFileCompleted
    23. MessageBox.Show("Die Datei wurde erfolgreich runtergeladen!")
    24. Me.Button1.Enabled = True
    25. End Sub
    26. Private Sub Button41_Click(sender As Object, e As EventArgs) Handles Button41.Click
    27. 'Process.Start(Application.StartupPath & "\Updater.exe")
    28. End Sub
    29. Private Sub WebClient_Update_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles WebClient_Update.DownloadProgressChanged
    30. Me.Label1.Text = e.ProgressPercentage
    31. End Sub


    Die Datei die runtergeladen wird hat so ca. 8 MB.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Was ist das denn für ein Gurkencode?!
    Updates macht man mit UpdateSystem.net (einfach mal bei Google eingeben). Das ist 100000000 mal sicherer und du musst deine Accountdaten nicht ins Programm schreiben. Außerdem fang mal an, deine Control zu benennen. Button41?! So viele Buttons?! Und benutzte für Pfade IO.Path.Combine. Und wieso steht die Version in einem Label und nicht in einer Integer-Variable, die dann von mir aus einem Label zugewiesen wird? Und du lädst nicht Asyncron runter...
    Mfg
    Vincent

    Wie es VincentTB gesagt hat. Verwende das UpdateSystem.net. Genaueres kannst du auf der Seite nachlesen. Zudem erspart es etwas Arbeit.

    Gruß
    Youtube Info Library 2013 jetzt im Showroom.