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