Navigate后如何暂停Webbrowser? 本帖最后由 Win32FanEx 于 2010-06-22 15:34:31 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置个定时器,到时间检查ReadState,如果不是Complete。就停止打开。不需要弄这么复杂。复杂的设计要谨慎。很少有既复杂又强壮的设计。 使用多线程要执行的部分写成函数 然后使用事件委托的模式 while(true){//事件调用} 通过使用Timer等方法设置延迟间隔,不使用Sleep方法停止当前线程的执行以求达到延迟目的WebBrowser控件也处于当前线程内,Sleep会同时暂停WebBrowser控件的运作。 楼上朋友方法比较简单,但这样可能会产生较为严重的延迟。特别是对于一些大型网页或网络不太好情况下。不过要想暂停webbrowser的navigate真的是很困难,webbrowser是如何navigate的不清楚,只知道它是异步的,它的线程在哪?不清楚,更别提暂停它了。。 "楼上朋友"是指wuyazhe,写贴子期间wuyq11又回了贴。到底用不用Sleep?我的目的就是要暂停webbrowser的navigate。请wuyq11仔细看我开头贴子,能不能给一个针对、具体的解决办法,谢谢! 其实很简单。我刚试了一下。效果不错。避免假死应该可以的。webBrowser1.Navigate(@"http://www.csdn.net");System.Threading.Timer t = new System.Threading.Timer( m => this.Invoke((Action)delegate { if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { webBrowser1.Stop();//终止掉 } }), null, 30000, System.Threading.Timeout.Infinite);//30秒检测 改进了一下。这样比较合理了。原理都注释进去了。private void button1_Click(object sender, EventArgs e){ bool live = true; webBrowser1.Navigate(@"http://www.csdn.net"); webBrowser1.ProgressChanged += delegate { live = true; }; System.Threading.Timer t = new System.Threading.Timer( m => this.Invoke((Action)delegate { //还没加载完,并且连续30秒没有进度增加了。 if (!live && webBrowser1.ReadyState != WebBrowserReadyState.Complete) webBrowser1.Stop();//终止掉 live = false;//检查过就设置为false,如果下一次进入循环,还是false表明进度没增加,可以考虑结束打开了 }), null, 0, 30000);//30秒检测,我们不检查是否结束了。而是判断是否仍然在尝试打开,这样如果网速慢就不至于错判} 简值不敢相信自己眼睛!楼上朋友你用的是56K moderm吗?就算是比较大的页面比如yahoo sohu首页,加载完毕也就5秒-10秒(现在宽带已普及),30秒-5分钟....我想等待时间应控制在3秒以内,这样用户才不会待的心烦。 非常感谢楼上朋友测试代码,现在考虑对之进行改变,就是不等complete,等到50%时就开始加载。这样能加快响应速度。当然最好是能找到暂停webbrowser navigate的方法。 楼主我不知道你是否解决了,我今天遇到和你一样的问题,我是如此解决的:1、定义一个bool变量,来标识我的一个任务是否完成2、在 axWebBrowser组件中的 BeforeNavigate方法中,判断这个变量,如果没完成,那我设置: Cancel = true; return; 从而达到自己的目的,希望对你有帮助 一年多过去了感谢叮当最后的回贴一年来,我通过页面分离方法制作了多进程web浏览器,防假死防崩溃。但多进程技术实现复杂,C#下更为低效。于是又改回了单进程。于是再次翻开了这个贴子,并采用了wuyazhe的方法。实在找不到其它防假死方法了。我想对于网页加载缓慢情况这种方法或许有些用处。如果网页真的卡死,webBrowser1.Stop可能根本就得不到执行。再次感谢当初回贴朋友! 关于socket的问题 谁能给我介绍下webgame服务器端的原理! 在C#用什么措施访问不同的局域网上的SQL Server 2000 自己写的window 服务,读取本地文件就退出 关于静态类的问题,请高手解答一下,谢谢。 DataGrid客户端分页问题 求C# primer电子版 SESSION 工作过的牛人帮忙进来看看小弟的问题! 请教一个查询 变量作用范围的怪事! 如何用C#接收所有UDP广播的信息,并列出发出者的IP地址?
要执行的部分写成函数 然后使用事件委托的模式
while(true){//事件调用}
WebBrowser控件也处于当前线程内,Sleep会同时暂停WebBrowser控件的运作。
到底用不用Sleep?我的目的就是要暂停webbrowser的navigate。请wuyq11仔细看我开头贴子,能不能给一个针对、具体的解决办法,谢谢!
System.Threading.Timer t = new System.Threading.Timer(
m => this.Invoke((Action)delegate
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
webBrowser1.Stop();//终止掉
}
}), null, 30000, System.Threading.Timeout.Infinite);//30秒检测
{
bool live = true;
webBrowser1.Navigate(@"http://www.csdn.net");
webBrowser1.ProgressChanged += delegate { live = true; };
System.Threading.Timer t = new System.Threading.Timer(
m => this.Invoke((Action)delegate
{
//还没加载完,并且连续30秒没有进度增加了。
if (!live && webBrowser1.ReadyState != WebBrowserReadyState.Complete) webBrowser1.Stop();//终止掉
live = false;//检查过就设置为false,如果下一次进入循环,还是false表明进度没增加,可以考虑结束打开了
}), null, 0, 30000);//30秒检测,我们不检查是否结束了。而是判断是否仍然在尝试打开,这样如果网速慢就不至于错判
}
简值不敢相信自己眼睛!楼上朋友你用的是56K moderm吗?就算是比较大的页面比如yahoo sohu首页,加载完毕也就5秒-10秒(现在宽带已普及),30秒-5分钟....我想等待时间应控制在3秒以内,这样用户才不会待的心烦。
2、在 axWebBrowser组件中的 BeforeNavigate方法中,判断这个变量,如果没完成,那我设置: Cancel = true;
return; 从而达到自己的目的,希望对你有帮助
但多进程技术实现复杂,C#下更为低效。于是又改回了单进程。于是再次翻开了这个贴子,并采用了wuyazhe的方法。实在找不到其它防假死方法了。我想对于网页加载缓慢情况这种方法或许有些用处。如果网页真的卡死,webBrowser1.Stop可能根本就得不到执行。再次感谢当初回贴朋友!