Code Bye

按书上写的BeginInvoke方法问题求指导

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明按书上写的BeginInvoke方法问题求指导