网站大量收购独家精品文档,联系QQ:2885784924

WebBrowser Navigate异步运行,如何.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WebBrowser Navigate异步运行,如何

WebBrowser Navigate异步运行,如何 引文来源WebBrowser.Navigate异步运行,如何使其与其他进程同步?2011-01-15 13:37WebBrowser.Navigate异步运行,如何使其与其他进程同步? 问题描述:有一个网页列表,准备用webBrowser的navigate一个个去访问,然后获取页面内容。但navigate是异步的,一调用之后,不等待页面加载完毕,因为访问网页需要时间,取决于网速,程序就返回循环继续用下一个网址调用navigate,导致navigate不停的被调用,结果是一个网页都打不开,只有列表中最后一个列表,因为没有后续的干扰能被完整加载。 网上发现有人跟我情况一样,提供的方法能解决问题,引述如下: --- net(c#)在循环语句中执行WebBrowser.Navigate();方法,每次循环等待网页加载完后继续执行的解决方案.最近在写一个小程序的时候,遇到这样的需求: 已知一组网页url地址,想获取每一个网页的html,实际上就是想利用循环语句里面使用WebBrowser来加载每一个网页,然后获取他们的html,要实现这个功能,想想应该是件很简单的事情,但是在实际操作中却遇到了问题,因为循环语句和WebBrowser的加载不同步的原因,导致前一个 前一个网页还没加载完,下一次循环又开始了.最终的结果是WebBrowser只获取到了最后一个页面的html.要解决这个问题,我们要做的就是 让循环执行完前一次后等待网页加载完,然后执行下一次循环去加载下面的网页.,按照这个思路,写了以下程序,经测试果然有效. bool loading=true;//该变量表示网页是否正在加载. string html=string.Empty; WebBrowser browser=new WebBrowser(); public void GetHtml(string { browser.Navigated+=new WebBrowserNavigatedEventHandler(browser_Navigated); foreach(string url in { loading=true;//表示正在加载 browser.Navigate(url); while(loading) { Application.DoEvents();//等待本次加载完毕才执行下次循环. } } } void browser_Navigated(object sender,WebBrowserNavigatedEventArgs e) { html=browser.DocumentText;//获取到的html. loading=false;//在加载完成后,将该变量置为false,下一次循环随即开始执行. } 上面的问题解决了,下面随之而来的问题是:有时候加载一张页面的时候,browser_Navigated会执行多次. 查了下网上的资料,原因是页面中含有iframe/iframe,每一个iframe都会触发一次browser_Navigated, 所以,以上程序可以完善如下: bool loading=true;//该变量表示网页是否正在加载. string html=string.Empty; WebBrowser browser=new WebBrowser(); public void GetHtml(string { browser.Navigated+=new WebBrowserNavigatedEventHandler(browser_Navigated); foreach(string url in { loading=true;//表示正在加载 browser.Navigate(url); while(loading) { Application.DoEvents();//等待本次加载完毕才执行下次循环. } } } int i=0; void browser_Navigated(object sender,WebBrowserNavigatedEventArgs e) { i++; if(i%3==0)//假设每张页面要执行3次browser_Navigated方法,那么这表示网页全部内容加载完成.(至于这个3要怎么样得到,那是仁者见仁的事情了,呵呵) { html=browser.DocumentText;//获取到的html. loading=false;//在加载完成后,将该变量置为false,下一次循环随即开始执行. } } --- 这位网友在Navigated事件中将loading设为false,而我则改在documentcompleted事件中来判断页面是否加载完毕。当

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档