1. #1
    Avatar von One Way
    Registriert seit
    07.12.2011
    Beiträge
    94
    Thanked 20 Times in 13 Posts

    Standard Listbox Items?

    Ich würde gerne einen Button so programmieren, dass er jedes Listboxite geöffnet (URLs) werden und dann der Quellcode der einzelnen Seiten in der Richtextbox "abgelegt" wird.

    Habe schon vieles probiert aber letztendlich nimmt er nur ein Item...

    Code:
     For url_items As Integer = 0 To ListBox1.Items.Count - 1
                
                Form1.WebBrowser1.Navigate("http://www.link.de/" + ListBox1.Items(url_items))
                RichTextBox1.AppendText(Form1.WebBrowser1.DocumentText)
    
            Next

    Kann mir da jemand helfen?

    LG
    Geändert von One Way (24.02.2014 um 21:26 Uhr)

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    8.017
    Thanked 9.387 Times in 3.225 Posts
    Blog Entries
    5

    Standard AW: Listbox Items?

    Das kann so auch nicht funktionieren, weil die Seite zu dem Zeitpunkt wo du den Quelltext abfragst noch gar nicht geladen ist. Dafür hat das WebBrowser-Control entsprechende Events (DocumentCompleted zb), die gefeuert werden wenn die Seite geladen ist. Wenn du das noch dazu in einer Schleife machst wird der wohl auch noch abbrechen und die nächste Seite laden. Dir geht es anscheinend aber sowieso nicht um die Darstellung sondern rein um den Quelltext, dafür ist das WebBrowser-Control das komplett falsche Werkzeug. Zumal da eine Menge Performance für das Laden und Parsen von CSS/Javascript sowie sonstigen Elementen wie z.B. Bilder verschwendet wird, die du in dem Fall gar nicht verwendest. Für so einfache HTTP-GET Requests benutzt man einen WebClient:


    using System.Net;
    [...]
    WebClient client = new WebClient();
    for (int i = 0; i < listBox1.Items.Count; i++) {
    string pageSource = client.DownloadString(listBox1.Items[i].ToString());
    // Quelltext weiterverarbeiten
    }


    Allerdings solltest du das ganze in einen separaten Thread auslagern, ansonsten wird deine GUI (also deine WinForm) einfrieren wenn du alles im Hauptthread machst. Das WebBrowser-Control lagert intern die ganzen Vorgänge auch in extra Threads aus. Daher gibts auch ein entsprechendes Event, das gefeuert wird wenn alles geladen und geparst wurde. Wenn dein Code funktionieren würde, würde deine GUI nämlich auch einfrieren, weil der Hauptthread durch die Ladevorgänge blockiert wird.
    Vergiss dann aber nicht deine Controls auf die du aus einem anderen Thread als den Hauptthread zugreifst vorher zu invoken.


  3. The Following User Says Thank You to DMW007 For This Useful Post:

    One Way (25.02.2014)

  4. #3
    Avatar von Sky.NET
    Registriert seit
    26.11.2011
    Beiträge
    2.462
    Thanked 2.718 Times in 1.287 Posts
    Blog Entries
    7

    Standard AW: Listbox Items?

    Bei Listboxen mit sehr vielen Elementen oder sehr vielen Updates kann es zu Performanceproblemen kommen, evtl. hilft dir ja auch dieser Link weiter:
    multithreading - c# update listbox without &#39;lag&#39; - Stack Overflow
    Nur so als Tipp nebenbei.
    Java:
    Spoiler:

    Lustige Quotes:
    Spoiler:
    Zitat Zitat von Hydra Beitrag anzeigen
    Hier (in Deutschland) kann man keine andere tolle Aktivitäten machen, als zu chillen, shoppen, saufen und Partys feiern xD Ich habe nichts gegen ab und zu mal saufen und Partys feiern, aber das ist doch nicht wirklich das wahre Leben o_o
    Wieso das Internet für die meisten Leute gefährlich ist:
    Zitat Zitat von Silent Beitrag anzeigen
    Ich weiß ja nicht was der Sinn dahinter steckt es heißt immer "security reasons".

  5. The Following User Says Thank You to Sky.NET For This Useful Post:

    One Way (25.02.2014)

  6. #4

    Registriert seit
    01.12.2011
    Beiträge
    41
    Thanked 39 Times in 16 Posts

    Standard AW: Listbox Items?

    Code:
    Public Sub Quelltext()
            Dim client As New Net.WebClient
            For url_items As Integer = 0 To ListBox1.Items.Count - 1
                SchreibeQuelltext(client.DownloadString("http://link.de/" & ListBox1.Items(url_items)))
            Next
        End Sub
    
        Private Delegate Sub SchreibeQuelltextDelegate(ByVal text As String)
    
        Private Sub SchreibeQuelltext(ByVal text As String)
            If RichTextBox1.InvokeRequired Then
                Dim d As New SchreibeQuelltextDelegate(AddressOf SchreibeQuelltext)
                Me.Invoke(d, New Object() {text})
            Else
                RichTextBox1.AppendText(text)
            End If
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim thread As New System.Threading.Thread(AddressOf Quelltext)
            thread.Start()
        End Sub
    Sollte funktionieren.

Ähnliche Themen

  1. Smiley Items
    Von Suchty im Forum Knuddels Allgemein
    Antworten: 1
    Letzter Beitrag: 25.12.2012, 03:06
  2. ListBox abarbeiten?
    Von Rawr. im Forum Hochsprachen
    Antworten: 20
    Letzter Beitrag: 06.09.2011, 22:58
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.