Die angegebene Umwandlung ist ungültig

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Die angegebene Umwandlung ist ungültig

    Morgen,

    Ich hab ein Problem:

    Ich möchte alle links einer website in eine listbox einfügen:

    Allerdings bekomme ich immer den bereits im Titel genannten Fehler in der ersten Zeile:

    VB.NET-Quellcode

    1. For Each Link As System.Windows.Forms.HtmlElement In WebBrowser1.Document.Links
    2. ListBox1.Items.Add(Link.GetAttribute("href"))
    3. Next




    Ich hoffe ihr könnt mir helfen.


    mfg markus
    füge die Items am besten zuerst mal in eine Temporäre Liste und rufe die ReportProgressMethode auf, dann kannst du im ProgressChanged Event die ListBox mit der Liste füllen und diese Clearen(aber ebenso könntest du den Wert auch direkt an Report Progress übergeben...)

    Der Grund für all das ist, dass du in einem Thread nicht einfach so auf einen anderen, in diesem Fall den GUI Thread zugreifen kannst...du könntest hierbei auch Invokes verwenden, aber dann könntest du es ja auch gleich mit einem normalen Thread programmieren ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Das Problem ist ganz klar, wie jvbsl schon gesagt hat, der BGW!
    Du kannst im DoWork Event (anderer Thread) nicht auf die GUI zugreifen.
    Mit BGW ist das sicher hier etwas umständlich...

    VB.NET-Quellcode

    1. Dim LinkList As HtmlElementCollection = WebBrowser1.Document.Links
    2. BackgroundWorker1.RunWorkerAsync(LinkList)
    3. End Sub
    4. Private libList As New List(Of String)
    5. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    6. For Each Link As System.Windows.Forms.HtmlElement In CType(e.Argument, HtmlElementCollection)
    7. libList.Add(Link.GetAttribute("href"))
    8. 'statt einer zweiten Liste könntest du auch über einen Delegaten die Listbox ansprechen (siehe Invoke)
    9. Next
    10. End Sub
    11. Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    12. For Each word As String In libList
    13. ListBox1.Items.Add(word)
    14. Next
    15. End Sub
    Das ist meine Signatur und sie wird wunderbar sein!

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