众所周知,委托的执行过程类似于线程的执行(实际上本质就是线程),当委托被Invoke以后,程序会开启一个异步线程执行委托,当委托执行完毕时线程自动终止。那么当委托被调用以后,如何判断委托是否已经执行完毕呢?
本文给出两种方式判断委托是否执行完毕。
1. 根据返回值判断。
当程序调用BeginInvoke启动委托的时候,BeginInvoke方法会返回一个IAsyncResult对象,该对象中有一个IsCompleted属性,当委托正在执行时IsCompleted属性为false,否则该属性为true,程序演示如下:
- UpdateTest update = new UpdateTest(updateTest);
- IAsyncResult ar=update.BeginInvoke(TestAsync,null);
- while (!result.IsCompleted)
- {
- //委托正在运行
- Console.Write(".");
- System.Threading.Thread.Sleep(100);
- }
2. 根据回调函数判断
注意到BeginInvoke方法中有一个名为AsyncCallBack的参数,顾名思义,该参数提供了一个回调触发函数,当委托调用完毕后,该函数将被触发。因此可以在该函数中判断委托是否调用完毕,以及给出委托处理结果。程序演示如下:
- private void TestAsync(IAsyncResult ar)
- {
- //委托调用完毕后的处理代码
- }
- public Class1()
- {
- UpdateTest update = new UpdateTest(updateTest);
- IAsyncResult result=update.BeginInvoke(TestAsync,null);
- for(int i=0;i<1000;i++)
- {
- Console.Write(".");
- System.Threading.Thread.Sleep(100);
- }
- }
QQ:819543772
EMail:wuchunlei@163.com