如何检查Web浏览器控件中托管的页面是否已呈现?

时间:2011-09-06 15:03:08

标签: wpf browser render

Hy People!我在这里再次请求你的帮助。我在Wpf应用程序中有一个Web浏览器控件。进入事件Load主窗口我设置了控件的源:

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
             webBrowser1.Source = new Uri(ConnectionString);
             webBrowser1.Navigate(ConnectionString);
    }

我被重定向到以下网址:https://login.live.com/login.srf?wa=wsignin1.0&wtrealm=urn%3acrm%3adynamics.com&wctx=rm%3d1%26id%3de513a320-df72-4de8-bce8-b1f918dc4eff%26ru%3dhttps%253a%252f%252fwebfortis38.crm.dynamics.com%252fdefault.aspx&wct=2011-09-06T14%3a49%3a38Z

此时我必须使用我的Windows Live ID登录。为此,我寻找输入控件以填充我的用户名和通行证,然后按钮提交以调用事件Click():

            HTMLDocument mdoc = (HTMLDocument)webBrowser1.Document;
            IHTMLElement usern = mdoc.getElementById("i0116"); 
            IHTMLElement dom = mdoc.getElementById("i0118");
            IHTMLElement btl = mdoc.getElementById("idSIButton9");

            if (usern != null && dom != null && btl != null)
            {
                // pass authentication
                usern.setAttribute("value", UserName);
                dom.setAttribute("value", password);

                btl.click();
                IsRendered=true;
            }

这就是问题!如果页面尚未呈现,则过程getElementById将返回Null !!。

有没有办法知道页面何时完全呈现? 提前谢谢!

3 个答案:

答案 0 :(得分:2)

  1. 从DocumentCompleted
  2. 开始一个新主题
  3. 来自新主题的入口点,
  4. 睡眠500毫秒,(或者允许完整的JavaScript初始化是安全的)
  5. 调用webbrowser的拥有主题
  6. 现在使用计算文档

答案 1 :(得分:0)

您可以使用webBrowser1的导航事件。

答案 2 :(得分:0)

Hy,a可以解决问题。我所做的是创建一个新线程。在这个新线程中,我将我的代码插入到DO-WHILE循环中,并将thread.abort()插入到IF循环中。谢谢你的帮助