确定WPF WebBrowser是否正在加载页面

时间:2011-07-20 19:52:41

标签: wpf webbrowser-control

我在Window中有一个WPF System.Windows.Controls.WebBrowser控件。用户可以输入信息并点击WebBrowser显示的网页中的提交按钮。页面回发后,它使用脚本对象与我的应用程序进行通信。我需要确保一旦按下提交按钮,表单就不会关闭或以其他方式停止等待网页回发。如果我可以通过像“IsLoading”这样的属性检查WebBrowser或其文档的状态并在加载时取消任何操作,那将是很好的。我没有看到类似的东西,所以我想在Navigating事件上设置一个标志,并在Navigated或LoadCompleted事件上取消设置,但有一种情况我点击网页上的链接(绑定到javascript,它没有进入新页面)导航被触发,但Navigated和LoadCompleted永远不会触发。有没有办法根据需要确定浏览器的状态?

2 个答案:

答案 0 :(得分:3)

根据MSDN,如果调用导航事件,除非您明确Cancel导航,否则导航事件也会被触发。我尝试了下面的代码片段似乎工作正常。 (即)Navigated事件在导航事件发生后被触发。

void Window1_Loaded(object sender, RoutedEventArgs e)
    {
        browser = new WebBrowser();
        browser.Navigate(new Uri("http://www.google.com"));
        browser.Navigating += new NavigatingCancelEventHandler(browser_Navigating);
        browser.Navigated += new NavigatedEventHandler(browser_Navigated);
    }

    void browser_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        Console.WriteLine("Loading Webpage !!");
    }

    void browser_Navigated(object sender, NavigationEventArgs e)
    {
        Console.WriteLine("Webpage Loaded !!");
    }

如果这不是您要查找的内容,请提供您遇到问题的网页网址。

答案 1 :(得分:0)

不,似乎没有办法按需查询WPF浏览器的状态。我决定在Navigating事件处理程序中设置自己的标志并在Navigated事件处理程序中取消设置它。它对我来说不可靠,因为有一个脚本取消了导航(javascript:void(0))。