Vb - PHP - Download Klasse

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Vb - PHP - Download Klasse

    Ist das so in Ordnung ?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Net
    4. Public Class DataDownload
    5. Private WithEvents wClient As New WebClient
    6. Public Event UpdateDataDownloadProgressBar As EventHandler(Of UpdateDataDownloadProgressBar)
    7. Public Sub DataBrowserServerAdresse(ByVal BaseUrl As String, ByVal FilePath As String, ByVal FileName As String)
    8. Dim FolderBrowserDialog1 As New FolderBrowserDialog
    9. If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
    10. If wClient.IsBusy = False Then
    11. wClient = New WebClient()
    12. wClient.Proxy = Nothing
    13. Try
    14. wClient.DownloadFileAsync(New Uri(BaseUrl & "DataDownload.php?FilePath=" & FilePath), Path.Combine(FolderBrowserDialog1.SelectedPath, FileName))
    15. Catch ex As Exception
    16. If System.IO.File.Exists(Path.Combine(FolderBrowserDialog1.SelectedPath, FileName)) = True Then
    17. System.IO.File.Delete(Path.Combine(FolderBrowserDialog1.SelectedPath, FileName))
    18. End If
    19. _UpdateDataDownloadProgressBar(0)
    20. MessageBox.Show(ex.Message.ToString, "Fehler !", MessageBoxButtons.OK, MessageBoxIcon.Error)
    21. End Try
    22. Else
    23. wClient.CancelAsync()
    24. If System.IO.File.Exists(Path.Combine(FolderBrowserDialog1.SelectedPath, FileName)) = True Then
    25. System.IO.File.Delete(Path.Combine(FolderBrowserDialog1.SelectedPath, FileName))
    26. End If
    27. End If
    28. End If
    29. End Sub
    30. Private Sub DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wClient.DownloadProgressChanged
    31. _UpdateDataDownloadProgressBar(e.ProgressPercentage)
    32. End Sub
    33. Private Sub DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wClient.DownloadFileCompleted
    34. Dim timeOut As Date = Date.Now().AddMilliseconds(500)
    35. While timeOut > Date.Now
    36. Application.DoEvents()
    37. End While
    38. _UpdateDataDownloadProgressBar(0)
    39. Console.Beep(CInt("2000"), CInt("500"))
    40. End Sub
    41. Private Sub _UpdateDataDownloadProgressBar(ByVal DownloadFortschritt As Integer)
    42. RaiseEvent UpdateDataDownloadProgressBar(Me, New UpdateDataDownloadProgressBar(DownloadFortschritt))
    43. End Sub
    44. End Class
    45. Public Class UpdateDataDownloadProgressBar : Inherits EventArgs
    46. Public ReadOnly DownloadProgressBar As Integer
    47. Public Sub New(ByVal DownloadFortschritt As Integer)
    48. DownloadProgressBar = DownloadFortschritt
    49. End Sub
    50. End Class


    Aufruf & Update :

    VB.NET-Quellcode

    1. Private WithEvents DD As New DataDownload
    2. Private Sub Dateidownload_Click(sender As Object, e As EventArgs) Handles Dateidownload.Click
    3. DD.DataDownloadAdresse(BaseUrl, FilePath ,FileName)
    4. End Sub
    5. Private Sub UpdateDataDownloadProgressBar(ByVal sender As Object, ByVal e As UpdateDataDownloadProgressBar) Handles DD.UpdateDataDownloadProgressBar
    6. label1.Text = e.DownloadProgressBar & " %"
    7. End Sub


    Verschoben aus "Sonstige Problemstellungen". ~Thunderbolt

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

    Option Strict On ist schonmal gut. Trotzdem bleibt e.DownloadProgressBar ein Integer. Da gehört nunmal .ToString dran :rolleyes:

    So auf die erste Sicht sehe ich folgende Unschönheiten / Fehler:
    • Teilweise schlechte Namensgebung (z.B. FolderBrowserDialog1 )
    • Wieso machst du dir genau eine eigene Klasse für den Download Fortschritt? Wenn du nur den Fortschritt auslesen möchtest, kannst du das auch so machen:

    VB.NET-Quellcode

    1. Private Sub wClient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wClient.DownloadProgressChanged
    2. Label1.Text = e.ProgressPercentage.ToString & " %"
    3. End Sub
    • Zeile 16 und 17 kannst du kombinieren, macht das ganze mMn übersichtlicher:

    VB.NET-Quellcode

    1. wClient = New WebClient() With {.Proxy = Nothing}
    • Anstatt öfters Path.Combine(FolderBrowserDialog1.SelectedPath, FileName) aufzurufen, leg dir eine Variable an, welche diesen Wert zugewiesen bekommt und verwende danach nur noch diese Variable. Viel einfacher zu warten.
    • Console.Beep(CInt("2000"), CInt("500")) - Aua. :| Das geht gar nicht. Eine Zahl als Text niederschreiben und dann zu einer Zahl konvertieren? Direkt als Zahl in den Code:

    VB.NET-Quellcode

    1. Console.Beep(2000, 500)


    Bereinige zuerst mal diese Fehler, dann schauen wir wieder weiter ;)
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    Trotzdem bleibt e.DownloadProgressBar ein Integer. Da gehört nunmal .ToString dran

    Ich würde noch gerne anmerken, dass das .ToString tatsächlich gar nicht nötig ist, da der &-Operator für Integer und String, bzw. String und Integer automatisch die Integer.ToString-Methode aufruft und mit dem String verknüpft. Ist demnach voll und ganz legitim.
    Beim Rest stimme ich dir zu. ^^
    @Dancger
    Danke !
    Ich werde der Größe wegen immer oben edieren !

    Ich mache deswegen ne eigene Klasse weil das nicht das einzige ist und sich so die Sachen besser edieren lassen .

    Hab jetz hier das das Problem wen ich es mehr als 1x aufrufe , das er mir sagt:

    VB.NET-Quellcode

    1. wClient.CancelAsync()
    2. If File.Exists(Path.Combine(SelectedPath, FileName)) = True Then
    3. File.Delete(Path.Combine(SelectedPath, FileName))
    4. End If


    Ein Ausnahmefehler des Typs "System.IO.IOException" ist in mscorlib.dll aufgetreten.
    Zusätzliche Informationen: Der Prozess kann nicht auf die Datei "C:\Users\zeus\Desktop\testy\Berserk.Das.Goldene.Zeitalter.3.flv" zugreifen, da sie von einem anderen Prozess verwendet wird.
    Jetzt funktioniert der Zitieren Button wiedermal net, hurra.

    @Higlav
    Ich wusste nicht, dass das auch mit Option Strict On funzt. Aber danke, wiedermal was gelernt :)

    @TVX
    1. Um welche Funktionen möchtest du den Download ergänzen? (Im Bezug auf die eigene Klasse)
    2. Der Fehler hängt nicht damit zusammen. Ich vermute, dass der Download noch läuft. Oder du hast die Datei mit einem anderen Programm geöffnet.

    Ansonsten häng doch mal das Projekt an.

    Und da wäre noch die Geschichte mit den Namenskonventionen ... ;)
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...