Webclient.Downloadfile richtig anwenden

  • VB.NET
  • .NET (FX) 4.0

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

    Webclient.Downloadfile richtig anwenden

    Hallo Zusammen,

    Ich habe aktuell das Problem, dass ich von DownloadfileAsync auf Downloadfile umsteigen muss, da die Async Method für mehrere Downloads in einer Schleife eine Exception hervorruft, die besagt, dass dieser nur 1 mal gleichzeitig verwendet werden kann.

    Die Downloadfile Methode erfüllt zwar den zweck, jedoch freezt sie das Programm wieder ein. Mit Google habe ich nicht nur gefunden, wie man eine Datei runterlädt allerdings nicht wie ich diesen Fehler umgehen kann.
    Der freeze hört auch genau auf, sobald der Download abgeschlossen ist.

    Hier einmal das Skript:

    VB.NET-Quellcode

    1. ​Private Sub DownloadFile(file As String, pfad As String)
    2. AddHandler Web.DownloadFileCompleted, AddressOf Downloadfile_complete
    3. AddHandler Web.DownloadProgressChanged, AddressOf Downloadfile_progress
    4. Web.Headers("User-Agent") = "Mozilla/4.0"
    5. Web.Proxy = Nothing
    6. Web.DownloadFile(New Uri(file), pfad)
    7. End Sub
    8. Private Sub Downloadfile_progress(sender As Object, e As DownloadProgressChangedEventArgs)
    9. Me.ToolStripProgressBar1.Value = e.ProgressPercentage
    10. lblPercentage.Text = e.ProgressPercentage & "%"
    11. Dim totalbytes As Double = Math.Round(e.TotalBytesToReceive / 1024 / 1024, 1)
    12. Dim bytes As Double = Math.Round(e.BytesReceived / 1024 / 1024, 1)
    13. lblKB.Text = bytes & "\" & totalbytes & "MB"
    14. End Sub
    15. Private Sub Downloadfile_complete(sender As Object, e As ComponentModel.AsyncCompletedEventArgs)
    16. Web.Dispose()
    17. If My.Settings.OriginalFile = My.Settings.SuggestedFile Then
    18. DownloadAlbumArt()
    19. Else
    20. ConvertFile()
    21. End If
    22. 'Dim sourcecode As String = WebBrowser.DocumentText.ToString
    23. 'Dim artist As String, app As String, title As String
    24. ''Titel und App bestimmen
    25. 'Try
    26. ' Dim Rgx As New System.Text.RegularExpressions.Regex("<META content=\047\042(?<title>.*)\042 on (?<App>.*) from Smule\047 property=\042og\072title\042>")
    27. ' Dim Match = Rgx.Match(sourcecode)
    28. ' title = Match.Groups("title").Value
    29. ' app = Match.Groups("App").Value
    30. 'Catch ex As Exception
    31. ' title = "Unknown"
    32. ' app = "Unknown"
    33. 'End Try
    34. ''Artist bestimmen
    35. 'Try
    36. ' 'Example Line <meta name="twitter:title" content='""Apologize" on Magic Piano" performed by MarvinKleinMusic">
    37. ' Dim webtitle As String = sourcecode.Split({"""handle"":"""}, StringSplitOptions.None)(1).Split({""}, StringSplitOptions.None)(CInt(("0")))
    38. ' Dim TestArray() As String = Split(webtitle, """")
    39. ' artist = TestArray(0)
    40. 'Catch ex As Exception
    41. ' artist = "Unknown"
    42. 'End Try
    43. 'Dim MP3FilePath As New TagLib.File.LocalFileAbstraction(My.Settings.OriginalFile)
    44. 'Dim MP3File As TagLib.File = TagLib.File.Create(MP3FilePath)
    45. ''ID3 Tags schreiben
    46. 'MP3File.Tag.Album = app
    47. 'MP3File.Tag.Title = title
    48. 'MP3File.Tag.Performers = New String() {artist}
    49. 'MP3File.Save()
    50. 'MP3File.Dispose()
    51. End Sub



    Kann mir Jemand weiterhelfen?

    LG

    ErfinderDesRades schrieb:

    Verwende einen HtmlClient, und nutze den Await-Pattern.
    Gugge zB Async, Await und Task


    Ähm entweder bin ich zur blöd oder den Namespace System.Net.http gibt es wirklich nicht.

    Zumindest kann ich diesen nicht importieren. Doch auch msdn.microsoft.com/de-de/libra…httpclient(v=vs.118).aspx sagt das es sie gibt.

    Warum finde ich diese nicht?
    Ja aber immer wenn ich System.Net.Http importieren möchte steht in VB Express
    Warnung 1 Der in Imports "System.Net.http" angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält und dass der importierte Elementname keine weiteren Aliase enthält. C:\Users\Marvin\documents\visual studio 2012\Projects\Sownloader\Sownloader\Sownloader.vb 3 9 Sownloader
    Also hast Du jetzt .NET 4.5? Dann musst Du wohl den Namespace erst über die Verweise entsprechend referenzieren. EInfach auswählen und die CheckBox checken.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Perfekt! :) Ich lese mich jetzt weiter durch dein sehr ausfürhliches Tutorial, sollte ich noch Fragen dazu haben, melde ich mich in dem Thread nochmal! :)

    LG