在 GeckoFX 中检查 ReadyState

Check ReadyState in GeckoFX

我的 C# 项目使用 WebBrowser 控件。我尝试集成 GeckoFX 而不是 WebBrowser。因为我总是在 WebBrowser 中更改输入,所以我必须等到网站完全加载。这就是为什么,我使用以下方法:

   private void navigateBrowser(string URL)
        {
            wb.Navigate(URL);
            while (wb.ReadyState != WebBrowserReadyState.Complete)
            {
                Thread.Sleep(1);
                Application.DoEvents();
            }
        }

我已经为 GeckoFX 更改了此方法,如下所示: private void navigateBrowser(string URL)

private void navigateBrowser(string URL)
        {
            wb.Navigate(URL);

  while (wb.Document.ReadyState != "complete")
            {
                Application.DoEvents();
            }
            while (wb.IsBusy)
            {
                Application.DoEvents();
            }
}

我调用 navigateBrowser("http://facebook.com") and then i fill the form for login. After i submit the form, i have to login in another website (in linkedin.com) i call again the navigateBrowser("http://linkedin.com"),当尝试从 geckowebbrowser 调用某些元素时,我收到错误 "Object reference not set to an instance of an object."。我查看了 geckowebbrowser 的实际 URL,它仍然是 facebook.com,但我应该是 linkedin.com,因为我调用了 linkedin.com.

可能是什么问题?我该如何解决这个问题?

使用网络浏览器的 DocumentCompleted 事件。

因此,例如 - 您的应用程序中有一个按钮可以导航到特定网页,还有一个方法可以在加载后读取页面。

因此,在 DocumentCompleted 事件处理程序中调用该方法 - 这将确保页面已加载。

Application.DoEvents() 循环对于等待页面加载不是一个好主意。例如,如果在你的循环中 closes/crashes 应用程序,它仍然是 运行 并且不会关闭。

此致