日期:2014-05-19  浏览次数:20964 次

关于IAsyncResult强制转换为AsyncResult
在异步调用的BeginInvoke方法中的回调方法中可一调用异步调用的EndResult方法。
代码如下。传递给EndResult方法的参数是BeginInvoke方法的结果ar(假设),ar没有AsyncDelegate属性,但强制转换为AsyncResult后就有该属性了,此时就可以调用EndInvoke方法,我搞不懂为什么转换为AsyncResult后就有AsyncDelegate属性了???
  static   void   CallbackMethod(IAsyncResult   ar)  
        {
                  AsyncMethodCaller   caller   =(AsyncMethodCaller)ar.AsyncDelegate;
                  string   returnValue   =   caller.EndInvoke(out   threadId,   ar)   ;     Console.WriteLine( "The   call   executed   on   thread   {0},   with   return   value   \ "{1}\ ". ",   threadId,   returnValue);      
      }


------解决方案--------------------
IAsyncResult是一个接中,并没有定义AsyncDelegate属性,但AsyncResult是一个类,它定义了AsyncDelegate属性。

而且EndInvoke的ar参数实际上返回的是一个AsyncResult对象。只不过因为它实现了IAsyncResult接中,所以可以互相转换。