winform操作webbrowser控件,全自动执行过程的精准统制

winform操作webbrowser控件,全自动执行过程的精准控制!
如题,我有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()
{    var a = fun1();
    if(a)
    {
        fun2();
    }
    else
    {
     ......
    }
}
这种程序不会写,怎么扯上高大上的 Sleep 去了呢?