事件的注册and派发

1、事件对象

/// <summary>
/// 事件对象
/// </summary>
class EventObj
{
     public object obj;           // 哪一个对象
     public string funcName;      // 方法名字
     public MethodInfo method;    // 方法对象
}

2、某个对象
就是任意举一个例子对象,你可以写任何的对象。

class Person
{
    public string name;
    public int age;
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    /// <summary>
    /// Show方法
    /// </summary>
    /// <param name="msg"></param>
    public void Show(string msg)
    {
       Console.WriteLine("名称为{0} 年龄为{1} {2}", this.name, this.age, msg);
    }
}

3、事件的派发

class Program
{
    // 创建一个事件队列
    static Queue<EventObj> q = new Queue<EventObj>();
    static void Main(string[] args)
    {
        // 创建两个具体的对象
        Person p = new Person("xiaoming", 12);
        Person p2 = new Person("abc", 123);

        // 事件1
        EventObj e0 = new EventObj();
        e0.funcName = "Show";
        e0.obj = p;
        e0.method = e0.obj.GetType().GetMethod(e0.funcName);
        q.Enqueue(e0); //入队

        // 事件2
        EventObj e1 = new EventObj();
        e1.funcName = "Show";
        e1.obj = p2;
        e1.method = e0.obj.GetType().GetMethod(e1.funcName);
        q.Enqueue(e1); //入队

        //开启线程监听事件队列
        Thread thread = new Thread(new ThreadStart(Process));
        thread.Start(); //启动线程
    }

    /// <summary>
    /// 线程处理函数
    /// </summary>
    static void Process()
    {
        while(true)   //死循环,一直在监听队列中有没有新事件的到来
        {
           if(q.Count>0) //拿出事件
           {
                EventObj eventObj = q.Dequeue();
                eventObj.method.Invoke(eventObj.obj, new object[] { "hello" });
           }
        }
    }
}

事件的注册以及派发,多用于接收网络消息,向UI抛出事件,或者两个不同的UI,互相派发事件。事件的用途,主要是因为响应者的不确定性,才会想到用事件。事件的派发者,只管向外抛事件,而谁想要响应,就需要自己监听就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值