Progressbar für Downloader/Updater

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Progressbar für Downloader/Updater

    Hallo erstmal,

    Sorry für den Fall dass dieser Thread im Falschen Forum ist.

    Also ich habe folgendes Problem und zwar möchte ich einen Updater für ein bestimmtes Programm machen. Die Grundlagen habe ich schon (dass er es Downloadet und Speichert). Nun möchte ich noch eine Progressbar die sich wärend dem Download füllt. Ich habe es schon versucht aber nichts funktioniert. Da ich noch neu bin habe ich leider kaum Ahnung davon. Ich weiß man muss sich eigentlich erst damit auseinandersetzen und alles als Anfänger. Aber da dieser Updater ein einmal Projekt werden soll dass ich danach höchstens Optisch etwas auffrische dachte ich es wäre okay dass ich einfach mal hier nachfrage.

    Hier der Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Web As New Net.WebClient
    3. Function TestInternetConnection()
    4. Dim ping As New Net.NetworkInformation.Ping
    5. Try
    6. ping.Send("LINK")
    7. Return True
    8. Catch ex As Exception
    9. Return False
    10. End Try
    11. End Function
    12. Private Sub Patch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Patch.Click
    13. If TestInternetConnection() = True Then
    14. Try
    15. Dim version As String = Web.DownloadString("LINK")
    16. version = CInt(version)
    17. If version > CInt(lblversion.Text) Then
    18. Try
    19. Dim path As String = "LINK"
    20. My.Computer.Network.DownloadFile(path, Application.StartupPath & "...")
    21. Catch ex As Exception
    22. MsgBox(ex.ToString)
    23. End Try
    24. End If
    25. Catch ex As Exception
    26. End Try
    27. End If
    28. End Sub
    29. End Class

    (Sorry weiß grad nicht wieso der code so "Komisch" da steht.)

    Ich hoffe mir kann jemand weiter helfen.


    Mit freundlichen Grüßen Weedy


    ps: bitte spart euch sachen wie "ähhhh... bist du dumm" und "stell nicht so dumme fragen" *sorry kommt öfters mal vor*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „weedy135“ ()

    Nimm nen WebClient. Lass die Finger von dem My-NameSpace... Benutze die Async-Methoden des WebClients, dann ist die ProgressBar easy-going...

    Ausserdem: Dein Ping, so wie Du ihn nutzt, ist sinnlos, weil Du das Ergebnis niemals ausliest.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    So hab dass ganze nun als webclient und alles ein bisschen umgeschrieben und diesen code verwendet

    VB.NET-Quellcode

    1. Imports System.Net
    2. Public Class Form1
    3. Private WithEvents httpclient As WebClient
    4. Dim Pfad As String = (Application.StartupPath)
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. My.Computer.Network.DownloadFile(Pfad, Application.StartupPath & "/...")
    7. Try
    8. httpclient = New WebClient
    9. Dim URL As String = "LINK"
    10. Application.DoEvents()
    11. Catch ex As Exception
    12. MsgBox("Es ist Folgender fehler aufgetreten:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical, "Es ist ein Fehler passiert")
    13. End Try
    14. End Sub
    15. Private Sub httpclient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles httpclient.DownloadProgressChanged
    16. End Sub
    17. End Class


    nun sagt er mir aber dass mir der Uugriff zu diesem Pfad verweigert wird. Wo ist da der Fehler? Ich möchte dass das Programm im selben Ordner runtergeladen wird wie die Patcher.exe ausgeführt wird. Kann mir jemand sagen wo der Fehler liegt?
    Application.DoEvents ist böse, hör auf, es zu verwenden. Wofür ist die Klammer um Application.StartupPath gut? Warum ist da ein völlig sinnloses Try-Catch?
    Und verwende, wie ich weiter oben gesagt habe, Path.Combine für Pfade.

    weedy135 schrieb:

    Kann mir jemand sagen wo der Fehler liegt?
    Hier:

    weedy135 schrieb:

    Dim Pfad As String = (Application.StartupPath)
    Pfad sollte eigentlich mit HTTP:// beginnen.
    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!
    Guck dir das mal an:

    VB.NET-Quellcode

    1. Private WithEvents httpclient As WebClient
    2. Dim Pfad As String = IO.Path.Combine(Application.StartupPath, "DeineDatei.exe")
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. httpclient = New WebClient
    5. Dim URL As String = "LINK" 'Dein Link, also zb. http://www.deineseite.com/Update.exe
    6. Try
    7. httpclient.DownloadFileAsync(New Uri(URL), Pfad)
    8. Catch ex As Exception
    9. MsgBox("Es ist Folgender fehler aufgetreten:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical)
    10. End Try
    11. End Sub
    12. Private Sub httpclient_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles httpclient.DownloadFileCompleted
    13. ProgressBar1.Value = 0
    14. 'Dieses Event wird aufgerufen, wenn die Datei fertig gedownloadet ist
    15. End Sub
    16. Private Sub httpclient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles httpclient.DownloadProgressChanged
    17. Progressbar1.Value = e.ProgressPercentage 'Deine Progressbar
    18. End Sub
    Mfg
    Vincent