Laden...

[erledigt] Webbrowser.Navigate() funktioniert nur, wenn die Maus über dem Control ist!

Erstellt von garv3 vor 11 Jahren Letzter Beitrag vor 11 Jahren 969 Views
G
garv3 Themenstarter:in
70 Beiträge seit 2009
vor 11 Jahren
[erledigt] Webbrowser.Navigate() funktioniert nur, wenn die Maus über dem Control ist!

Hallo zusammen,

ich habe ein Problem mit einem Webbrowser Control.
Ich möchte den Webbrowser unsichtbar in ein Form einfügen und dann, je nach Aktion im Programm, in diesem versteckten Webbrowser bestimmte Seiten öffnen und diese dann z.B. nach bestimmten Informationen durchsuchen.
Das funktioniert allerdings nur bedingt. Der Webbrowser öffnet sich und lädt auch die Seite. documentCompleted wird korrekt aufgerufen. Wenn ich nun aber eine andere Seite laden will, so muss dafür die Maus innerhalb des Webbrowser-Bereichs liegen. Das ist bei einem versteckten Webbrowser natürlich nicht möglich. Wenn ich den Webbrowser anzeige und die Maus dann in ein anderes Fesnter bewege oder eine andere Anwendung fokussiere, wird so lange kein navigate() mehr ausgeführt, bis ich den Mauszeiger in den Bereich des Webbrowsers bewege.

Hat jemand eine Ahnung, woran das liegen könnte?

Dank und Gruß
garv3

EDIT: Ich hab es jetzt nochmal nachgeprüft:
documentCompleted wird NICHT aufgerufen, wenn sich der Mauszeiger außerhalb des Webbrowser Controls befindet! Erst, wenn ich den Mauszeiger darüber bewege, wird das Event ausgelöst...

W
195 Beiträge seit 2008
vor 11 Jahren

Ohne das jetzt ausprobiert zu haben - aber das hört sich doch schon reichlich seltsam an. Ich denke, da liegt das Problem ganz woanders. Ohne Deinen Code zu kennen, kann man dazu aber nichts sagen.

Mal abgesehen davon, warum verwendest Du nicht System.Net.WebClient anstatt des Webbrowser-Controls, wenn Du sowieso keine visuelle Repräsentation benötigst?

G
garv3 Themenstarter:in
70 Beiträge seit 2009
vor 11 Jahren

Hmm, der Code ist ziemlich komplex. Ihn hier zu posten ist wohl nicht möglich.
Ich hab leider keine Ahnung, woher der Fehler kommen soll...

Ich nutze den Webbrowser, da ich u.a. auch Formulare ausfüllen, Invokes nutzen und Javascript-Events auslösen können muss. Das ganze ist nicht ganz trivial. Leider verstehe ich einfach nicht, wieso der WebBrowser plötzlich nur noch reagiert, wenn sich die Maus darüber befindet...

EDIT: Ich hab grad mal etwas rumprobiert und festgestellt, dass die Events auch nicht ausgelöst werden, wenn sich der Mauszeiger über dem Webbrowser befindet, sich aber nicht bewegt. Das heißt: Ich muss die Maus über dem Control bewegen, damit die Seite komplett geladen wird...

G
garv3 Themenstarter:in
70 Beiträge seit 2009
vor 11 Jahren

Der ReadyState wechselte immer erst bei einer Mausbewegung über dem Control auf Complete. Vorher stand er auf Iteractive!

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo garv3,

das muss aber andere Ursachen haben. Ich habe das WebBrowser-Control mehrfach verwendet, und es war nie nötig die Maus über dem Controls zu haben oder gar zu bewegen.

Aber wenn du sagst, dass das Control versteckt ist, hast du es möglicherweise in einem anderen Thread als dem GUI-Thread erzeugt? Dann würde das Control nicht richtig funktionieren. Es muss - wie alle anderen Controls - im GUI-Thread erzeugt werden und auch alle Zugriffe müssen aus dem GUI-Thread erfolgen.

herbivore

G
garv3 Themenstarter:in
70 Beiträge seit 2009
vor 11 Jahren

Nein, es wird im Hauptform erzeugt. Der ReadyState bleibt halt auf 'Interactive'. Somit konnte ich jetzt einfach die Abfrage des ReadyStates erweitern und es funktioniert.