委托,begininvoke,endinvoke

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 线程实验2
{
    class Program
    {
        public delegate object myDelegate(object o);
        public static myDelegate myDel;
        static void Main(string[] args)
        {
           myDel=new myDelegate(cal);
           myDel.BeginInvoke(5,new AsyncCallback(callback),myDel);//5是委托方法需要的参数,mydel是传给回调函数的状态
           Console.ReadLine();
        }
        public static object cal(object o)
        {
          (o)*5;      //这里值得注意,将object先拆箱,在装箱。具体的定义请参考msdn
        }
        public static void callback(IAsyncResult iar)
        {
            myDel =(myDelegate)iar.AsyncState;   //获得主函数传过来的状态,要用到强制类型转换
            object t = myDel.EndInvoke(iar);     //EndInvoke方法的返回值就是被调用方法的返回值,即cal的返回值
            Console.WriteLine(t.ToString());
        }
  
    }

}

/*大家可以单步一下,看程序的执行顺序,反正我是大开眼界
*/

/**********************************************************************************************************************************/

多播委托(MulticastDelegate)提供了一种类似于流水线式的钩子机制只要加载到这条流水线上的委托,都会被顺序执行。因为所有的委托都继承自MulticastDelegate,因此所有的委托都具备多播特性。最简单的理解:一个委托,但同时可以执行多个方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 委托试验3
{
    class Program
    {
        public delegate void MyDelgegate(string str);
        public static MyDelgegate Mydel1 = new MyDelgegate(callback1); 
        public static MyDelgegate Mydel2 = new MyDelgegate(callback2);
        public static MyDelgegate Mydel3;
        static void Main(string[] args)
        {
            Mydel3 += Mydel1;                               
            Mydel3 += Mydel2;                                                //将callback1和callback2方法都加到mydel3中去。
            Mydel3("Hello,FirstCallBack!");
            Mydel3 -= Mydel1;                                               // 将callback1从委托mydel3中去除
            Mydel3("Hello,SecondCallBack!");
            //ydel2("Hello,SecondCallBack!");
            Console.ReadLine();
        }
        public static void callback1(string str)
        {
            Console.WriteLine("这是第一个调用!"+str);
        }
        public static void callback2(string str)
        {
            Console.WriteLine("这是第二个调用!" + str);
        }
    }
}

调试结果为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值