.net(c#)在循环语句中执行WebBrowser.Navigate();方法,每次循环等待网页加载完后继续执行的解决方案. - QQ空间 : 个人资源 : CEO-Jack个人博客
  • 设为首页|收藏本站| 标签云|
  • ·外贸网站建设
  • 首页
  • SEO
  • 网店系统
  • 编程相关
  • 个人资源
  • 新闻
  • 联系我们
123

同主题文章

[转]一点一滴培养...
教你如何看透一个人
80后的大学校园流...
垃圾总归是垃圾,偶...

你可能也喜欢

[转]一点一滴培养你的领导气质(职场培训)
最新 新白发魔女传 第42集 大结局 在线观看
zencart模版特色
zencart 邮件安全
怀念google
笔记本电脑 内存插入位置不对导致笔记本电脑黑屏
外贸小额收款 alertpay
中国省份seo

当前位置:Home > 个人资源 > QQ空间 > .net(c#)在循环语句中执行WebBrowser.Navigate();方法,每次循环等待网页加载完后继续执行的解决方案.
QQ空间

.net(c#)在循环语句中执行WebBrowser.Navigate();方法,每次循环等待网页加载完后继续执行的解决方案.

发布者:老刘 发布时间: 2010-01-27

 

最近在写一个小程序的时候,遇到这样的需求:           已知一组网页url地址,想获取每一个网页的html,实际上就是想利用循环语句里面使用WebBrowser来加载每一个网页,然后获取他们的html,           要实现这个功能,想想应该是件很简单的事情,但是在实际操作中却遇到了问题,因为循环语句和WebBrowser的加载不同步的原因,导致前一个           前一个网页还没加载完,下一次循环又开始了....最终的结果是WebBrowser只获取到了最后一个页面的html.要解决这个问题,我们要做的就是           让循环执行完前一次后等待网页加载完,然后执行下一次循环去加载下面的网页.....,按照这个思路,写了以下程序,经测试果然有效.

bool loading = true;   //该变量表示网页是否正在加载.         string html = string.Empty;         WebBrowser browser = new WebBrowser();         public void GetHtml(string[] urls)         {                         browser.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);             foreach (string url in urls)             {                 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[] urls)         {                         browser.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);             foreach (string url in urls)             {                 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,下一次循环随即开始执行.             }         }


原创文章,欢迎转载。转载请注明:转载自http://www.wai-mao.net/happy/a-1449.html,谢谢!


相关文章:
  1. 本站启用新域名www.wai-mao.net
  2. 人员招聘
  3. zencart 忘记管理员密码方法
  4. 以前申请的多余的6个Gizmo5帐号送,需要的留言
  5. 长期坐着不动会得什么病?
  6. 贝宝合理使用规则
  7. wordpress升级过程出现的问题
  8. zencart 批量网站备份 解决方案
用户名: 访客
邮箱:
评论内容:

   下一篇: How sweet!我侄子
上一篇: C# 自动填表

首页| 关于我们| zencart优化| paypal防冻结| 在线留言| 新闻|

© 2005-2025 CEO-Jack个人博客 Copyright, All Rights Reserved.  2014-2020  

rss sitemaps