C# 使用代码隐藏加载网页

C# 使用代码隐藏加载网页,c#,.net,wpf,xaml,webbrowser-control,C#,.net,Wpf,Xaml,Webbrowser Control,我有一个场景,我正在从我公司的一个内联网页面中删除一些值。我不打算在我的应用程序中显示该页面。我只需要一些网页上的数据 但是我注意到必须在Xaml中创建WebBrowser,才能触发LoadComplete事件。因为我不打算显示这个网页,所以我不想在Xaml中创建它 这里有一个例子说明了我所说的 Xaml版本(事件触发正常): Xaml: 结果:然后消息框显示。(事件发生) 仅代码版本(事件不触发): 代码: 结果:事件未触发 如果我在code behind中使用WebBrowser,是否

我有一个场景,我正在从我公司的一个内联网页面中删除一些值。我不打算在我的应用程序中显示该页面。我只需要一些网页上的数据

但是我注意到必须在Xaml中创建
WebBrowser
,才能触发LoadComplete事件。因为我不打算显示这个网页,所以我不想在Xaml中创建它

这里有一个例子说明了我所说的


Xaml版本(事件触发正常):

Xaml:

结果:然后消息框显示。(事件发生)


仅代码版本(事件不触发):

代码:

结果:事件未触发



如果我在code behind中使用
WebBrowser
,是否有方法触发事件?

如果不需要显示页面,您最好使用该类


还有一种方法,它不会阻止UI。如果不需要显示页面,最好使用该类

        MyWebClient client = new MyWebClient();
        client.DownloadStringCompleted += new MyWebClient.DownloadStringCompletedEventHandler(HandleDownloadStringCompleted);

    // call the async method
        client.DownloadStringAsync(url, handler);

还有一种方法不会阻止UI

浏览器未加载代码的原因是它不在可视化树中:它未被放入UI。Xaml one之所以能够工作,是因为它已被放入可视化树中,而这仅仅是因为它是在Xaml中创建的

        MyWebClient client = new MyWebClient();
        client.DownloadStringCompleted += new MyWebClient.DownloadStringCompletedEventHandler(HandleDownloadStringCompleted);

    // call the async method
        client.DownloadStringAsync(url, handler);
如果您想从代码创建浏览器,那么要使其工作,您需要将其放入可视化树中。例如:


public主窗口()
{
初始化组件();
WebBrowser codeBehindBrowser=新建WebBrowser{Visibility=Visibility.Collapsed};
codeBehindBrowser.LoadCompleted+=CodeBehindBrowserverOnLoadCompleted;
codeBehindBrowser.Navigate(“http://stackoverflow.com/");
this.LayoutRoot.Children.Add(codeBehindBrowser);
}
私有无效代码BehindBrowserverOnLoadCompleted(对象发送方,NavigationEventArgs e)
{
Show(“codebhindbrowser加载了,耶!”);
}

只要它以某种方式插入到可视化树中,它就应该工作。

浏览器背后的代码没有加载的原因是它不在可视化树中:它没有被放入UI中。Xaml one之所以能够工作,是因为它已被放入可视化树中,而这仅仅是因为它是在Xaml中创建的

如果您想从代码创建浏览器,那么要使其工作,您需要将其放入可视化树中。例如:


public主窗口()
{
初始化组件();
WebBrowser codeBehindBrowser=新建WebBrowser{Visibility=Visibility.Collapsed};
codeBehindBrowser.LoadCompleted+=CodeBehindBrowserverOnLoadCompleted;
codeBehindBrowser.Navigate(“http://stackoverflow.com/");
this.LayoutRoot.Children.Add(codeBehindBrowser);
}
私有无效代码BehindBrowserverOnLoadCompleted(对象发送方,NavigationEventArgs e)
{
Show(“codebhindbrowser加载了,耶!”);
}

只要它以某种方式插入到可视化树中,它就应该工作。

这是获取数据的好方法。但它以字符串的形式返回。我的代码的其余部分需要一个IHTMLDocument2来处理(或者至少可以使用xml进行搜索)。文档可以很容易地转换为IHTMLDocument2。HtmlAgilityPack允许我使用xpath查询数据。谢谢你的帮助!这是一种很好的获取数据的方法。但它以字符串的形式返回。我的代码的其余部分需要一个IHTMLDocument2来处理(或者至少可以使用xml进行搜索)。文档可以很容易地转换为IHTMLDocument2。HtmlAgilityPack允许我使用xpath查询数据。谢谢你的帮助!这可以工作并且速度更快(因为它不渲染它)
public MainWindow()
{
    InitializeComponent();

    WebBrowser codeBehindBrowser = new WebBrowser();
    codeBehindBrowser.LoadCompleted += WebBrowserOnLoadCompleted;
    codeBehindBrowser.Navigate("http://stackoverflow.com/");
}

private void WebBrowserOnLoadCompleted(object sender, NavigationEventArgs navArgs)
{
    MessageBox.Show("PageLoaded");
}
WebClient client = new WebClient();
//client.Credentials = new NetworkCredential("username", "password");
string reply = client.DownloadString(address);
        MyWebClient client = new MyWebClient();
        client.DownloadStringCompleted += new MyWebClient.DownloadStringCompletedEventHandler(HandleDownloadStringCompleted);

    // call the async method
        client.DownloadStringAsync(url, handler);