不迎不送,来去自便,无茶无酒,谈笑随缘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

众所周知,委托的执行过程类似于线程的执行(实际上本质就是线程),当委托被Invoke以后,程序会开启一个异步线程执行委托,当委托执行完毕时线程自动终止。那么当委托被调用以后,如何判断委托是否已经执行完毕呢?

本文给出两种方式判断委托是否执行完毕。

1.  根据返回值判断。

当程序调用BeginInvoke启动委托的时候,BeginInvoke方法会返回一个IAsyncResult对象,该对象中有一个IsCompleted属性,当委托正在执行时IsCompleted属性为false,否则该属性为true,程序演示如下:

  1. UpdateTest update = new UpdateTest(updateTest);
  2.             IAsyncResult ar=update.BeginInvoke(TestAsync,null);
  3.             while (!result.IsCompleted) 
  4.             {
  5.               //委托正在运行  
  6.                 Console.Write(".");                
  7.                 System.Threading.Thread.Sleep(100);
  8.             }

2.  根据回调函数判断

注意到BeginInvoke方法中有一个名为AsyncCallBack的参数,顾名思义,该参数提供了一个回调触发函数,当委托调用完毕后,该函数将被触发。因此可以在该函数中判断委托是否调用完毕,以及给出委托处理结果。程序演示如下:

 

 

  1.  private void TestAsync(IAsyncResult ar) 
  2.         {
  3.             //委托调用完毕后的处理代码
  4.         }
  5.         public Class1() 
  6.         {
  7.             UpdateTest update = new UpdateTest(updateTest);
  8.             IAsyncResult result=update.BeginInvoke(TestAsync,null);
  9.             for(int i=0;i<1000;i++)
  10.             {
  11.                 Console.Write(".");                
  12.                 System.Threading.Thread.Sleep(100);
  13.             }
  14.           
  15.   }
 

QQ:819543772

EMail:wuchunlei@163.com

posted on 2008-09-05 15:20  wude  阅读(176)  评论(0编辑  收藏  举报