C#异步委托检测线程结束的方式

编程入门 行业动态 更新时间:2024-10-20 16:08:23

C#异步委托检测<a href=https://www.elefans.com/category/jswz/34/1771240.html style=线程结束的方式"/>

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#异步委托检测线程结束的方式

本文发布于:2024-03-14 18:45:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737107.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线程   结束   方式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!