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和打印不在一个线程。