WebBrowser的DocumentCompleted事件第一次不触发怎么破

这辈子我算是废了 2015-06-11 08:59:14
wbXML.DocumentCompleted += wbXML_DocumentCompleted;
SetProcessEvent(lstApplNo.Count);
bool isOk = true;
if (lstApplNo.Count > 0)
{
for (int i = 0; i < lstApplNo.Count; i++)
{
string url = "http://engpat.kipris.or.kr/engpat/biblioa.do?method=biblioMain_biblio&next=biblioViewSub01&applno=" + lstApplNo[i] + "&getType=BASE";
applNoCount = i;
UpdateProcessEvent(i, lstApplNo.Count);
wbXML.Navigate(url);
Thread.Sleep(5000);
}
}
遍历集合构建路径 WebBrowser访问 由于取的数据是js拼接的 线程休眠五秒再取 循环第一条数据不触发DocumentCompleted事件 求教育 只能发100分的解决了再开砖厂
...全文
286 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2015-06-11
  • 打赏
  • 举报
回复
是不是启动了,只是时间上,因为你用多线程可能是后面执行。
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
wbXML.Navigate(url);这样子不会触发DocumentCompleted 事件?
用多线程了
  • 打赏
  • 举报
回复
引用 8 楼 zhi_ai_yaya 的回复:
[quote=引用 7 楼 starfd 的回复:] [quote=引用 5 楼 zhi_ai_yaya 的回复:] 为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
看了下,这东西跟FileSystemWatcher一样啊,都存在可能的重复触发问题,以及触发时可能文件还处于其它状态[/quote] 是的。这个控件处理网页的确很方便,它是完全符合人工操作习惯的,在任何外部网站服务器看来都是人工手动访问。但是它是一个COM+组件,非托管类型的。 所以,我使用的时候,一般是定时器+某个判断条件。定时器用于估算网页是否加载完毕,判断条件用于验证加载完毕。这个判断条件,可以如博文里面【记录上一个url和readyState属性】,我有时会使用DocumentText.length这个属性。[/quote]我把多线程去掉改定时器算了
  • 打赏
  • 举报
回复
引用 5 楼 zhi_ai_yaya 的回复:
为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
只能单线程么 进度会假死额
我叫小菜菜 2015-06-11
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
[quote=引用 5 楼 zhi_ai_yaya 的回复:] 为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
看了下,这东西跟FileSystemWatcher一样啊,都存在可能的重复触发问题,以及触发时可能文件还处于其它状态[/quote] 是的。这个控件处理网页的确很方便,它是完全符合人工操作习惯的,在任何外部网站服务器看来都是人工手动访问。但是它是一个COM+组件,非托管类型的。 所以,我使用的时候,一般是定时器+某个判断条件。定时器用于估算网页是否加载完毕,判断条件用于验证加载完毕。这个判断条件,可以如博文里面【记录上一个url和readyState属性】,我有时会使用DocumentText.length这个属性。
  • 打赏
  • 举报
回复
引用 5 楼 zhi_ai_yaya 的回复:
为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
看了下,这东西跟FileSystemWatcher一样啊,都存在可能的重复触发问题,以及触发时可能文件还处于其它状态
我叫小菜菜 2015-06-11
  • 打赏
  • 举报
回复
再加一段挺不错的代码。
        /// <summary>
        /// WebBrowser 让其不跳转到ie
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            try
            {
                string url = this.webBrowser1.Document.ActiveElement.GetAttribute("href");

                this.webBrowser1.Url = new Uri(url);
            }
            catch
            {
            }
        }
我叫小菜菜 2015-06-11
  • 打赏
  • 举报
回复
为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
我叫小菜菜 2015-06-11
  • 打赏
  • 举报
回复
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
  • 打赏
  • 举报
回复
不会是代码重入了吧
  • 打赏
  • 举报
回复
wbXML.Navigate(url);这样子不会触发DocumentCompleted 事件?
  • 打赏
  • 举报
回复
在线等
我叫小菜菜 2015-06-11
  • 打赏
  • 举报
回复
引用 13 楼 SmallFlyingBird 的回复:
引用 9 楼 SmallFlyingBird 的回复:
[quote=引用 5 楼 zhi_ai_yaya 的回复:] 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
只能单线程么 进度会假死额
我现在改成Timer了为何第一个页面刷新了两次啊 我擦
引用 12 楼 jinfengyiye 的回复:
是不是启动了,只是时间上,因为你用多线程可能是后面执行。
第一次貌似没触发 第二次才触发 所有内容都向后排了[/quote] 定时器也有两种: 一种是严格定时,不管操作是否超时。即在5s、10s、15s、20s......都触发。存在任务会不断重复的情况。 另一种是灵活的:5s触发,然后把定时器停下来再执行操作,3s后操作完毕。然后定时器在第8s再次启动,在13s触发...... 多线程对于webbrowser控件并没有多大优势(或许是我个人技术不够吧),体验都不好,会假死或者效率地,又找不到其他办法,哎
  • 打赏
  • 举报
回复
引用 9 楼 SmallFlyingBird 的回复:
[quote=引用 5 楼 zhi_ai_yaya 的回复:] 为了分数我也是拼了: 先给你好好普及一下这个文档加载完毕的事件: http://www.cnblogs.com/SkyD/archive/2009/08/06/1540028.html 这个事件并不是真正的”全部加载完毕后执行一遍“,事实上,一个页面里面经常有ajax请求以及iframe,所以通常会出发好多遍(不固定),所以要谨慎使用。 另外线程睡眠的办法,可能会影响到webbrowser:这是单线程组件。建议改为timer定时器,5秒后关闭或释放定时器就行了。
只能单线程么 进度会假死额[/quote]我现在改成Timer了为何第一个页面刷新了两次啊 我擦
引用 12 楼 jinfengyiye 的回复:
是不是启动了,只是时间上,因为你用多线程可能是后面执行。
第一次貌似没触发 第二次才触发 所有内容都向后排了

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧