One Way (25.02.2014)
Thema: Listbox Items?
-
24.02.2014, 21:24 #1
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?
LGGeändert von One Way (24.02.2014 um 21:26 Uhr)
-
24.02.2014, 22:48 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 8.017
- Blog Entries
- 5
Thanked 9.387 Times in 3.225 PostsAW: 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.
-
The Following User Says Thank You to DMW007 For This Useful Post:
-
25.02.2014, 14:12 #3
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 'lag' - Stack Overflow
Nur so als Tipp nebenbei.Java:
Spoiler:
Lustige Quotes:
Spoiler:
-
The Following User Says Thank You to Sky.NET For This Useful Post:
One Way (25.02.2014)
-
26.02.2014, 00:41 #4
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
Ähnliche Themen
-
Smiley Items
Von Suchty im Forum Knuddels AllgemeinAntworten: 1Letzter Beitrag: 25.12.2012, 03:06 -
ListBox abarbeiten?
Von Rawr. im Forum HochsprachenAntworten: 20Letzter Beitrag: 06.09.2011, 22:58
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.