c#中使用委托操作线程

 使用委托的BeginInvoke和EndInvoke操作线程的步骤:

        1.实例化委托  

static CalculateMethod calculateMethod = new CalculateMethod(CalutateTwo); static PrintMethod printM = new PrintMethod(Print);
static PrintMethod printM = new PrintMethod(Print);


       2.调用委托的BeginInvoke方法 BeginInvoke(委托需要的参数,回调方法(可为null),传递的对象(可为null))

          方法执行完后会返回 IAsyncResult 类型的结果 

       

IAsyncResult asyResult = printM.BeginInvoke("直接调用EndInvoke获取返回值 ", null, null);

如果不调用EndInvoke方法,程序会立即退出,这是由于使用BeginInvoke创建的线程都是后台线程,这种线程一但所有的前台线程

都退出后(其中主线程就是一个前台线程),不管后台线程是否执行完毕,都会结束线程,并退出程序。

3.使用EndInvoke方法接收返回的结果

(1)直接使用EndInvoke方法获取返回值

string result = printM.EndInvoke(asyResult);
            (2)使用IAsyncResult asyncResult属性来判断异步调用是否完成

当后台线程工作量巨大的时候,调用完BeginInvoke方法后,用户要等待很久才会有反馈,会影响用户交互体验,这时我们可以用

asyncResult来判断异步调用是否结束,并显示一些提示信息,增加用户体验。

//模拟线程调用时间过长,手动设置线程阻塞2s
Thread.Sleep(2000);
IAsyncResult Iresult = printM.BeginInvoke("直接调用EndInvoke获取返回值 ", PrintCallBack, null);
          
//IsCompleted 线程执行完毕时,IsCompleted为true 
 
while (!Iresult.IsCompleted)
{
Console.Write("*");
Thread.Sleep(1000);
}
string result = printM.EndInvoke(Iresult); 
Console.WriteLine(result);

          (3)使用回调方法返回结果

//PrintCallBack为回调函数,当线程执行完后会调用这个函数,可以在这个函数中接收返回的结果
printM.BeginInvoke("直接调用EndInvoke获取返回值 ", PrintCallBack, null);
         
static void PrintCallBack(IAsyncResult Result)
{
Console.WriteLine(printM.EndInvoke(Result));
}
















                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值