2015-05-26 39 views
0

我对我的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。

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

回答

0

使用webbrowser的DocumentCompleted事件。

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

所以,在DocumentCompleted事件hanlder中,调用该方法 - 这将确保页面已经加载。

Application.DoEvents()循环不是在页面加载时等待的好主意。例如,如果在循环过程中关闭/崩溃应用程序,它仍然会运行并且不会关闭。

Regards