检查GeckoFX中的ReadyState
问题描述:
我对我的C#项目使用WebBrowser控件。我尝试整合GeckoFX而不是WebBrowser。因为我总是在WebBrowser中改变输入,所以我必须等到网站完全加载。这就是为什么,我用下面的方法:检查GeckoFX中的ReadyState
private void navigateBrowser(string URL)
{
wb.Navigate(URL);
while (wb.ReadyState != WebBrowserReadyState.Complete)
{
Thread.Sleep(1);
Application.DoEvents();
}
}
我已经改变了这种方法GeckoFX这样的: 私人无效navigateBrowser(字符串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”),然后我填写登录表单。提交表单后,我必须登录另一个网站(在linkedin.com),我再次调用navigateBrowser(“http://linkedin.com”),当尝试从geckowebbrowser调用某个元素时,出现错误“Object reference not set to一个对象的实例。“我检查geckowebbrowser的实际URL,它仍然是facebook.com,但我应该是linkedin.com,因为我打电话给linkedin.com。
可能是什么问题?我该如何解决这个问题?
答
使用webbrowser的DocumentCompleted事件。
因此,例如 - 您的应用程序中会有一个按钮,它将导航到特定的网页以及一旦加载后将读取页面的方法。
所以,在DocumentCompleted事件hanlder中,调用该方法 - 这将确保页面已经加载。
Application.DoEvents()循环不是在页面加载时等待的好主意。例如,如果在循环过程中关闭/崩溃应用程序,它仍然会运行并且不会关闭。
Regards