线程结束的方式"/>
C#异步委托检测线程结束的方式
1、异步委托开启多线程
通过BeginInvoke开启异步委托,BeginInvoke返回IAsyncResult类型的对象,可以通过这个对象获得线程状态,比如线程执行状态。
TakesAWhileDelegate d1 = TakesAWhile; //声明委托
IAsyncResult ar = d1.BeginInvoke(1,3000,null,null); //BeginInvoke:在一个独立的线程上执行引用方法,并且立即返回到原始线程,原始线程可以继续。
2、隐式检测线程结束,并获取返回值
通过IAsyncResult对象获取线程状态:
while(ar.IsCompleted ==false )
{Thread.Sleep(50);}int result = d1.EndInvoke(ar);//执行到这句时,线程一定执行结束,EndInvoke取得返回值
3、使用等待句柄等待线程结束
//超过50ms线程还没结束返回false
bool isEnd = ar.AsyncWaitHanle.WaitOne(50,false)
4、异步回调检测线程结束
需要用到BeginInvoke的倒数第二个参数,BeginInvoke的第三个参数用于传递委托,供线程结束时调用,回调函数即此委托所指向的方法。
回调函数如何拿到方法的返回值?需要用到BeginInvoke的第四个参数,可以填写任何类型。
回调函数的参数是固定的IAsyncResult,可以用其一个属性AsyncState来获取其传递的数据。
使用Lambda表达式简化:
更多推荐
C#异步委托检测线程结束的方式
发布评论