using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BeginInvoke112 { class Program { //定义一个委托 public delegate int sum(int a, int b); //定义一个类 public class number { public int m =4; //定义一个和委托一样签名的方法 public int numadd(int a, int b) { return a + b; } //定义一个与AsyncCallback委托对应的回调方法 public void Callback(IAsyncResult ar) { sum s = (sum)ar.AsyncState; m= s.EndInvoke(ar); } } static void Main(string[] args) { number n = new number(); sum s1 = new sum(n.numadd);//把S1这个委托指向n.numadd方法 AsyncCallback async = new AsyncCallback(n.Callback);//回调方法把n.callback放入 s1.BeginInvoke(55, 33, async, s1); Console.WriteLine("this sum is :{0}",n.m); Console.ReadKey(); } } }
本人按书上的代码打的。为什么结果出不了88呢。出的结果是M赋得值。假如M初始为0 就是0。
这个begininvoke的用法有什么不对吗?还是回调的写法有问题?
解决方案
50
Endinvoke是执行完返回,你的代码中CallBack和打印不在一个线程。