winform操作webbrowser控件,全自动执行过程的精准统制
winform操作webbrowser控件,全自动执行过程的精准控制!
如题,我有20个方法(都是操作webbrowser控件的)需要依次执行,执行第一个方法之后会返回一个结果,根据这个结果判断第一个方法是否执行成功,但是第一个方法执行完毕的时间是未知的,但我又必要等待这个返回结果判断是否成功,才能决定多久调用下一个方法执行,怎样去等待第一个方法执行完毕?用Thread.Sleep();阻塞线程肯定是不行,每个方法执行都需要等待上一个方法执行完毕,因为都是操作webbrowser控件的,等待过程都是未知的延迟时间。
核心问题就是:怎么样去等待上一方法个执行完毕返回结果,而又不中断线程,然后执行下一个方法,请有类似项目经验的大神赐教,小弟不胜感激!
------解决思路----------------------
不用Sleep是不想UI被卡死是吗?那你可以单独另开一个线程,在里头按序执行你的20个方法,也不会导致界面卡死。
差不多方法是这样的:
------解决思路----------------------
用委托,把后续步骤放在委托中
------解决思路----------------------
------解决思路----------------------
你这个问题匪夷所思。明明是
如题,我有20个方法(都是操作webbrowser控件的)需要依次执行,执行第一个方法之后会返回一个结果,根据这个结果判断第一个方法是否执行成功,但是第一个方法执行完毕的时间是未知的,但我又必要等待这个返回结果判断是否成功,才能决定多久调用下一个方法执行,怎样去等待第一个方法执行完毕?用Thread.Sleep();阻塞线程肯定是不行,每个方法执行都需要等待上一个方法执行完毕,因为都是操作webbrowser控件的,等待过程都是未知的延迟时间。
核心问题就是:怎么样去等待上一方法个执行完毕返回结果,而又不中断线程,然后执行下一个方法,请有类似项目经验的大神赐教,小弟不胜感激!
------解决思路----------------------
不用Sleep是不想UI被卡死是吗?那你可以单独另开一个线程,在里头按序执行你的20个方法,也不会导致界面卡死。
差不多方法是这样的:
//设置控件的CheckForIllegalCrossThreadCalls属性,使之可跨线程操作webbrowser控件
//当然,你还可以通过使用Invoke调用委托
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Thread 任务线程 = new Thread(new ThreadStart(任务方法));
任务线程.Start();
void 任务方法()
{
while(true)
{
//以方法返回的bool判断是否重新执行该方法,下面类似
if (方法1()) break;
}
while(true)
{
if (方法2()) break;
}
.....
while(true)
{
if (方法20()) break;
}
//如果你还要从头再来,这里加个goto跳前面再从方法1开始
}
------解决思路----------------------
用委托,把后续步骤放在委托中
------解决思路----------------------
class MyClass
{
private WebBrowser _wb;
//构造函数,实例化时传入WebBrowser实例
public MyClass(WebBrowser wb)
{
_wb = wb;
}
//接下来可以对_wb进行操作
}
------解决思路----------------------
你这个问题匪夷所思。明明是
void all()这种程序不会写,怎么扯上高大上的 Sleep 去了呢?
{ var a = fun1();
if(a)
{
fun2();
}
else
{
......
}
}