private static void CallBack(IAsyncResult ar) { Console.WriteLine("-------执行异步回调方法---------"); AsyncResult re = ar as AsyncResult; // IAsyncResult 接口的引用在内部是 AsyncResult 类的引用 MyDel3 del = re.AsyncDelegate as MyDel3; // 通过 AsyncResult 类对象,获取委托对象 string result = del.EndInvoke(ar); // 委托对象,调用 EndInvoke 等待引用方法的完成 Console.WriteLine("----EndInvoke完成----"); // 此时,需要注意的是:结果是新线程的结果,主线程的UI需要使用的话,还需要转一个委托 }
private static void CallBack2(IAsyncResult ar) { Console.WriteLine("-------执行异步回调方法---------"); Console.WriteLine("传入的参数" + ar.AsyncState as string); // 传入的参数,在回调函数中 以AsyncState(object) 形式展现,具体使用时,需要强制转换 AsyncResult re = (AsyncResult)ar; MyDel3 del = (MyDel3)re.AsyncDelegate; string result = del.EndInvoke(ar); Console.WriteLine("----EndInvoke完成----"); }
private static void CallBack3(IAsyncResult ar) { Console.WriteLine("-------执行异步回调方法---------"); MyDel3 del = ar.AsyncState as MyDel3; // 一般使用时,就采用这一步即可 AsyncResult re = (AsyncResult)ar; MyDel3 del2 = (MyDel3)re.AsyncDelegate; Console.WriteLine("两种方法获取的委托是否是同一个:" + del.Equals(del2)); string result = del.EndInvoke(ar); Console.WriteLine("----EndInvoke完成----"); }