Ich möchte die Ausführung meines Threads anhalten, bis ein bestimmtes Div über Ajax in eine WebBrowser-Instanz geladen wurde. Offensichtlich kann ich ständig nach der Anwesenheit dieses Divs suchen, indem ich etwas wie folgt mache:
%Vor% Wenn Sie jedoch den Thread, in dem sich der Browser befindet, zwischen den Loops schlafen lassen, wird der Browser erst vom tatsächlichen Laden des Inhalts blockiert. Es scheint daher, dass ich die Methode Browser.Navigate
in einem separaten Thread ausführen muss - ich kann dann weiter auf das Vorhandensein des div warten / warten, während die WebBrowser-Instanz weiterhin die URL lädt, zu der ich sie aufgefordert habe.
Meine Versuche sind jedoch gescheitert, und ich würde Wert darauf legen, wie ich darüber vorgehen sollte. Ich dachte, einfach einen neuen Thread mit new Thread(() => { Browser.Navigate(url); });
zu versenden würde funktionieren, aber danach wird nichts geladen und der Browser.ReadyState bleibt als 'Uninitialized'. Ich gehe davon aus, dass ich falsch verstehe, wie man mit C # Verfahren wie diese richtig einfädelt und würde einen Ratschlag wertschätzen!
Blockieren Sie nicht die Nachrichtenpumpe des Hauptfadens. Da der Browser eine STA-Komponente ist, kann xmlhttprequest keine Ereignisse aus dem Hintergrundthread auslösen, wenn Sie die Nachrichtenpumpe blockieren. Sie können nicht in einem Hintergrundthread navigieren. Der Windows Forms-Wrapper des Webbrowsers ActiveX unterstützt keinen Zugriff von anderen Threads als dem UI-Thread. Verwenden Sie stattdessen einen Timer.
Sie können zum Beispiel einen Text in Körper finden:
%Vor%Tags und Links .net c# multithreading browser