vb.net Mehrere strings asynchron downloaden

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    vb.net Mehrere strings asynchron downloaden

    hey,

    in meinem Programm lade ich viele Strings herunter. Ich habe schon ausprobiert alle Strings über das downloadstringcomplete auszugeben aber es gibt mir leider immernur einen string aus :(

    Nochmal im klartext:
    Ich downloade auf meiner Form irgendwie 5 strings (momentan nicht async was total laggt) nun habe ich mal versucht alle strings async zu downloaden was auch funktionierte nur ich hab mir die strings extra auch immer mit einer msgbox ausgeben lassen im downloadstringcomplete event doch er hat mir immer nur eine msgbox von 5 ausgegeben als ob er nur einen string gedownloadet hat von 5 oder so.

    könnt ihr mir helfen wie ich alle strings in einer liste oder so bekomme?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    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!
    Wie ist Dein Downloadcode? Definiere im Formular Dim DowLoadedTexts As New List(Of String) und schreibe im EventHandler, dass diese Liste um den heruntergeladenen String erweitert werden soll (DownloadedTexts.Add(DerHeruntergeladeneString).
    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.
    Jo das sind gute ideen ich werde Sie mal testen, sorry war gerade nicht erreichbar ;)
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    So ich habe jetzt mal rumprobiert es funktioniert leider noch nicht aber ich denke ich rufe es nur falsch ab. Hier mal mein Code:

    Zum downloaden:

    VB.NET-Quellcode

    1. Private WithEvents wc As New WebClient ''' Natürlich nicht mit in einem Sub
    2. wc = New WebClient
    3. wc.DownloadStringAsync(New Uri("https://www.blablabla.com" & "?dl=1"))


    VB.NET-Quellcode

    1. Private Sub wc_downloadstringcompleted(sender As System.Object, e As DownloadStringCompletedEventArgs) Handles wc.DownloadStringCompleted
    2. Dim dload As New List(Of String)
    3. dload.Add(e.Result.ToString)
    4. dload.Add(e.Result.ToString)
    5. dload.Add(e.Result.ToString)
    6. dload.Add(e.Result.ToString)
    7. dload.Add(e.Result.ToString)
    8. dload.Add(e.Result.ToString)
    9. dload.Add(e.Result.ToString)
    10. MsgBox(dload.Item(0).ToString)
    11. MsgBox(dload.Item(1).ToString)
    12. MsgBox(dload.Item(2).ToString)
    13. MsgBox(dload.Item(3).ToString)
    14. MsgBox(dload.Item(4).ToString)
    15. MsgBox(dload.Item(5).ToString)
    16. MsgBox(dload.Item(6).ToString)
    17. End Sub


    Also die MessageBox'en werden angezeigt nur halt leider mit keinem Inhalt.
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    Oha. Dann ist wohl nicht ganz klar, was der Code macht. Und dann noch ne VB6-MsgBox ... Dann wohl eher so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private dload As New List(Of String)
    3. Private WithEvents wc As New WebClient ''' Natürlich nicht mit in einem Sub
    4. '...
    5. wc = New WebClient
    6. wc.DownloadStringAsync(New Uri("https://www.blablabla.com" & "?dl=1"))
    7. '...
    8. Private Sub wc_downloadstringcompleted(sender As System.Object, e As DownloadStringCompletedEventArgs) Handles wc.DownloadStringCompleted
    9. dload.Add(e.Result.ToString)
    10. MessageBox.Show(dload.Item.Last)
    11. End Sub
    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.

    fehler aufgetreten + anhang

    Joaa ich hab die Msgbox erstmal gelassen die ist sowieso erstmal nur zum testen da

    So ich hab den nun geändert funkt trotzdem nicht nun hab ich ne Fehlermeldung bekommen (siehe Anhang)

    VB.NET-Quellcode

    1. Private Sub wc_downloadstringcompleted(sender As System.Object, e As DownloadStringCompletedEventArgs) Handles wc.DownloadStringCompleted
    2. dload.Add(e.Result.ToString)
    3. dload.Add(e.Result.ToString)
    4. dload.Add(e.Result.ToString)
    5. dload.Add(e.Result.ToString)
    6. dload.Add(e.Result.ToString)
    7. dload.Add(e.Result.ToString)
    8. dload.Add(e.Result.ToString)
    9. MsgBox(dload.Item(0).Last)
    10. MsgBox(dload.Item(1).Last)
    11. MsgBox(dload.Item(2).Last)
    12. MsgBox(dload.Item(3).Last)
    13. MsgBox(dload.Item(4).Last)
    14. MsgBox(dload.Item(5).Last)
    15. MsgBox(dload.Item(6).Last)
    16. End Sub


    Achja nochmal zur Info, ich benutze wirklich 7 Downloadlinks also, ich benutze nicht nur ein und der eine string soll 7 mal anbespeichert werden nenenene, ich benutze 7 Links und alle sollen einmal gespeichert werden^^
    Bilder
    • Unbenannt.png

      53,6 kB, 706×478, 266 mal angesehen
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    WHAT?
    1. Von dload.Item(0).Last habe ich nichts geschrieben, sondern von dload.Item.Last. Mit Deinem inkl. (0) käme das letzte Zeichen des Strings in die Liste.
    2. Was bringt Dir das, 7x das gleiche e.Result in die Liste zu packen?
    3. Du hast doch bestimmt mehrere (ich tippe auf 7) Zeilen der Art wc.DownloadStringAsync(New Uri("https://www.blablabla.com"...), richtig? Wenn Du da eine ausführen lässt und der Download fertig ist, dann wird die Sub wc_downloadstringcompleted ausgeführt. Und zwar quasi für den heruntergeladenen String. Welcher das ist, steht in dem Parameter e. Das heißt, dass die Sub 7x aufgerufen wird. Immer dann, wenn ein String heruntergeladen wurde. Daher reicht es auch, wenn Result 1x in die Liste hinzugefügt wird. Wenn Du willst, kannst Du das auch 7x machen (Post#7, Zeile#2-#8), aber es ergibt keinen Sinn.
    4. Mach noch eine Prüfung am Anfang der wc_downloadstringcompleted-Sub, ob e.Result leer ist. Wenn es leer ist, raus aus der Sub. Oder sinnvolles Fehlertracking, da e.Result nicht leer sein sollte, vermute ich.

    ##########

    Laut MSDN solltest Du bei e auch schauen, was die Properties Cancelled und Error zu melden haben und nicht nur auf Result schauen. Wenn Result nämlich leer ist, wird einer von den anderen Kandidaten bestimmt was mitteilen wollen.
    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.
    whaaaaaaaaaat
    in error steht nicht drin
    in Cancelled ist ein false
    aber trotzdem geben die ganzen messagebox'en nichts aus und nun?

    EDIT
    @NoIde
    Ic e.result steht leider garnichts drin. Und ich lade einen String von Dropbox runter. (der string befindet sich in einer txt-datei)
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    Gegenbeispiel:

    VB.NET-Quellcode

    1. Public Class FrmMain
    2. Private dload As New List(Of String)
    3. Private ClientList As New List(Of Net.WebClient)
    4. Private Counter As Integer = 1
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. For i = 1 To 3
    7. ClientList.Add(New Net.WebClient)
    8. AddHandler ClientList.Last.DownloadStringCompleted, AddressOf Downloadstringcompleted
    9. ClientList.Last.DownloadStringAsync(New Uri("http://25.io/toau/audio/sample.txt"))
    10. Next
    11. End Sub
    12. Private Sub Downloadstringcompleted(sender As System.Object, e As Net.DownloadStringCompletedEventArgs)
    13. dload.Add($"{Counter}: {e.Result}")
    14. If Counter = ClientList.Count Then MessageBox.Show(String.Join(Environment.NewLine, dload))
    15. Counter += 1
    16. End Sub
    17. Private Sub FrmMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    18. For Each Client In ClientList
    19. Client.Dispose()
    20. Next
    21. End Sub
    22. End Class
    ergibt:


    Probier mal bitte Deinen und diesen Code mit der in Zeile#11 gezeigten Adresse. Kommt da was bei raus?
    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.
    Oh ok ^^
    Du hast es ja jetzt nur mit einem Link gemacht, wie würde es funktionieren wenn man jetzt 7 hat? ^^

    EDIT
    ach ok warte hab ich überlesen ich probiers mal...
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    VaporiZed schrieb:

    Kommt da was bei raus?
    Da wär noch ne Antwort schön.
    Ja, habe ich, weil ich auf Anhieb nur einen TXT-Filelink habe. Aber das ist ja wurscht. Nur weil bei mir 3x die selbe Datei runtergeladen wird, heißt das ja nicht, dass es mit 3 oder 7 verschiedenen nicht klappen würde. Es war nur aus Bequemlichkeit. Aber dieser Link war bestätigt (dass dabei was rauskommt), daher hab ich ihn verwendet.
    Jeder Download braucht wohl nen eigenen WebClient, sonst meckert DownloadStringAsync.
    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.
    Gut. Dann probiere es statt mit dem Safe-URI eben mit Deiner Adresse. Wenn es klappt, finde den Fehler in Deinem Code. Wenn es nicht klappt, ist Dein URI-Link wohl nicht zu gebrauchen.
    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.
    Ok funkt nicht...
    Also ja also kann ich meinen Dropbox link nicht mehr gebrauchen?

    edit
    naja egal ist nicht so schlimm ich setz das hier mal auf erledigt ;)
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

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

    Dein Link scheint fehlerhaft zu sein. Setze ich folgenden ein, läuft es weiterhin: https://www.dropbox.com/s/jdi4qlkqi9jrr30/TESTING.txt?dl=1
    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.