Esempio n. 1
0
 public void On(string eventName, GeneralEventHandler callback)
 {
     if (socket != null)
     {
         socket.on(eventName, callback);
     }
 }
Esempio n. 2
0
 // 调用一般事件监听函数
 public void Emit(string eventName, string result, ServerCallbackEventHandler callback)
 {
     if (_GeneralEventHandlers.ContainsKey(eventName))
     {
         GeneralEventHandler list = _GeneralEventHandlers[eventName];
         if (list != null)
         {
             list.Invoke(result, callback);
         }
         else
         {
             _GeneralEventHandlers.Remove(eventName);
         }
     }
 }
Esempio n. 3
0
        // 移除一般事件监听
        public void Off(string eventName, GeneralEventHandler callback)
        {
            if (_GeneralEventHandlers.ContainsKey(eventName))
            {
                GeneralEventHandler list = _GeneralEventHandlers[eventName];
                if (list != null)
                {
                    list -= callback;
                    _GeneralEventHandlers.Remove(eventName);
                    _GeneralEventHandlers.Add(eventName, list);
                    return;
                }

                _GeneralEventHandlers.Remove(eventName);
            }
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            Publishser  pub  = new Publishser();
            Subscriber1 sub1 = new Subscriber1();
            Subscriber2 sub2 = new Subscriber2();
            Subscriber3 sub3 = new Subscriber3();

            pub.NumberChanged += new GeneralEventHandler(sub1.OnNumberChanged);
            pub.NumberChanged += new GeneralEventHandler(sub2.OnNumberChanged);
            pub.NumberChanged += new GeneralEventHandler(sub3.OnNumberChanged);
            pub.NumberChanged += new GeneralEventHandler(GetStriing);
            pub.DoSomething();          // 触发事件

            GeneralEventHandler dd = new GeneralEventHandler(GetStriing2);
            string s = dd();

            Console.WriteLine(s);
            Console.ReadKey();
        }
Esempio n. 5
0
        public List <string> DoSomething()
        {
            List <string> strList = new List <string>();

            if (numberChanged == null)
            {
                return(strList);
            }

            // GetInvocationList方法用于获取当前委托变量中的委托链表,即一个委托数组。
            Delegate[] delArray = numberChanged.GetInvocationList();

            foreach (Delegate del in delArray)
            {
                // 进行一个向下转换,要想调用具体的委托方法,必须把系统委托转换为具体的委托类型。
                // 向下转换,是把大类型转换成小类型,这样才能调用小类型中的方法。
                GeneralEventHandler method = (GeneralEventHandler)del;
                try
                {
                    //strList.Add(method(100));       // 调用方法并获取返回值
                    // DynamicInvoke可以调用任何类型的委托方法,参数为参数数组,即任意数量任意类型的参数,返回值为一个object。
                    //strList.Add((string)del.DynamicInvoke(100));
                    method.BeginInvoke(100, null, null);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            return(strList);
            //if (numberChanged != null)
            //{    // 触发事件
            //    string rtn = numberChanged();
            //    Console.WriteLine(rtn);     // 打印返回的字符串,输出为Subscriber3
            //}
        }
Esempio n. 6
0
 // 取消注册
 public void UnRegister(GeneralEventHandler method)
 {
     NumberChanged -= method;
 }
Esempio n. 7
0
 private event GeneralEventHandler NumberChanged; // 声明一个私有事件
                                                  // 注册事件
 public void Register(GeneralEventHandler method)
 {
     NumberChanged = method;//使用“+”而不是“+=”,就避免了多个方法注册
 }
Esempio n. 8
0
 public void UnRegister(GeneralEventHandler handler)
 {
     NumberChanged -= handler;//即使method方法没有进行过注册,也不会抛出异常,仅仅是不会产生任何效果而已。
 }
Esempio n. 9
0
        private event GeneralEventHandler NumberChanged;//将NumberChanged声明为委托变量还是事件都无所谓了,因为它是私有的。

        //注册事件
        public void Register(GeneralEventHandler handler)
        {
            NumberChanged = handler;//“=”,通过这种方式就避免了多个方法注册
        }
Esempio n. 10
0
 public void Register(GeneralEventHandler method)
 {
     // 将事件设置为私有外界就无法直接注册事件了,只能通过公有方法来实现,我们可以设置为赋值=,这样只能注册一个,注册多个就会覆盖。
     numberChanged = method;
 }
Esempio n. 11
0
 public void Off(string eventName, GeneralEventHandler callback)
 {
     _EventTarget.Off(eventName, callback);
 }