Laden...

WebBrowser & Threads in .NET 2.0

Erstellt von .unreal vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.081 Views
.unreal Themenstarter:in
563 Beiträge seit 2004
vor 18 Jahren
WebBrowser & Threads in .NET 2.0

Hallo Community

Eins vorweg: ich verwende .NET 2.0 Beta

Ich hab mir mithilfe der WebBrowser klasse (die super funktioniert) zugriff auf diverse pages verschaffen, ohne auf threads zu achten.

Login und Datenauslesen mit Regex funktioniert super. Jetzt will ich allerdings die Abfragen in einem Thread im Hintergrund abhandeln, damit ich die windows.forms aktualisieren kann, ohne dass sie "nicht reagieren". Ich habe die neue Klasse BackgroundWorker gefunden und sofort ausprobiert, allerdings funktionierte es nicht wirklich.

Ich denke, dass hier einige sich schon mit der neuen WebBrowser Klasse auseinandergesetzt haben, darum will ich euch fragen, wie ihr dieses Threadproblem gelöst habt. Das auslesen der Daten erfolgt schlussendlich immer in dem DocumentCompleted event, nur muss man ja warten, bis dieser Event gefeuert wird.

Es muss nicht dringend ein Codebeispiel her, es geht mehr um den Grundgedanken, und vieleicht ein zwei kleine Snippets.

Gruss,
.unreal

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo .unreal,

das WebBrowsser-Control selbst blockiert ja das GUI- bzw. den GUI-Thread nicht. Also wenn du eine Url setzt, wird die im Hintergrund geladen und erst wenn sie fertig geladen ist, feuert DocumentCompleted. Wenn du jetzt in DokumentCompleted z.B. nur ein Eingabefeld per Id heraussuchst, mit Text füllst und einen Button clickst. Dann sind diese Aktionen so kurz, dass du sie direkt in DocumentCompleted ausführen kannst, ohne das da was blockiert. Wenn du dagegen z.B. eine aufwändige Analyse über den HTML-Text machen willst, dann musst du genau diese Aktion in einen Thread verlagern. Es ist aber grundsätzlich egal, ob wir über WebBrowser.DokumentCompleted oder Button.Click reden. Jede lange Aktion, die in einem EventHandler (eines Controls) ausgeführt wird, blockiert das GUI. Jedenfalls sehe ich erstmal nichts webBrowser-spezifisches an deiner Frage.

HTH

herbivore

.unreal Themenstarter:in
563 Beiträge seit 2004
vor 18 Jahren

was hab ich mir da nur überlegt grübel

.unreal Themenstarter:in
563 Beiträge seit 2004
vor 18 Jahren

eine andere Frage zum WebBrowser:

Wenn eine Page mehrere Frames hat, wird der DocumentCompleted event mehrmals aufgerufen (ist auch logisch, es sind mehrere dokumente). Wie kann ich das umgehen? Weil der Event mehrmals gefeuert wird, krieg ich die geparsten Daten immer doppelt und mehrfach. Gibt es ein Attribut, oder muss ich selber ein Flag setzten?

Gruss,
.unreal

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo .unreal,

nein, aber du bekommst in den EventArgs übergeben, welche Url completed ist. Und die Url von dem Frameset feuert als letzte das DocumentCompleted.

herbivore

.unreal Themenstarter:in
563 Beiträge seit 2004
vor 18 Jahren

wunderbar, funktioniert!

danke für die schnelle antwort!