public void On(string eventName, GeneralEventHandler callback) { if (socket != null) { socket.on(eventName, callback); } }
// 调用一般事件监听函数 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); } } }
// 移除一般事件监听 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); } }
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(); }
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 //} }
// 取消注册 public void UnRegister(GeneralEventHandler method) { NumberChanged -= method; }
private event GeneralEventHandler NumberChanged; // 声明一个私有事件 // 注册事件 public void Register(GeneralEventHandler method) { NumberChanged = method;//使用“+”而不是“+=”,就避免了多个方法注册 }
public void UnRegister(GeneralEventHandler handler) { NumberChanged -= handler;//即使method方法没有进行过注册,也不会抛出异常,仅仅是不会产生任何效果而已。 }
private event GeneralEventHandler NumberChanged;//将NumberChanged声明为委托变量还是事件都无所谓了,因为它是私有的。 //注册事件 public void Register(GeneralEventHandler handler) { NumberChanged = handler;//“=”,通过这种方式就避免了多个方法注册 }
public void Register(GeneralEventHandler method) { // 将事件设置为私有外界就无法直接注册事件了,只能通过公有方法来实现,我们可以设置为赋值=,这样只能注册一个,注册多个就会覆盖。 numberChanged = method; }
public void Off(string eventName, GeneralEventHandler callback) { _EventTarget.Off(eventName, callback); }