using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JwKdsV.Core.MessageEvent { /// /// 消息事件提供者 /// public class MsgEventProvider { private string eventType = string.Empty; public List Receivers; public MsgEventProvider(string _eventType) { eventType = _eventType; Receivers = new List(); } ~MsgEventProvider() { //Console.WriteLine(string.Format("{0}的MsgEventProvider析构函数执行!", eventType)); } public string EventType { get { return eventType; } } private event EventHandler appEventHandler; public event EventHandler AppEventHandler { add { appEventHandler += value; } remove { appEventHandler -= value; } } #region 外部调用事件 public void Run(Object sender , MsgEventArgs args) { if (appEventHandler != null) { appEventHandler(sender , args); } #region 去除那些只绑定一次处理事件的对象 for (int i = 0; i < Receivers.Count; i++) { try { MsgReceiver item = Receivers[i]; if (item == null) continue; if (item.IsOnce) { AppEventHandler -= item.appEventHandler; Receivers.Remove(item); } } catch { Console.WriteLine("去除接受者对象列表中内容错误!"); } } #endregion } public void AddListener(MsgReceiver receiver) { Receivers.Add(receiver); AppEventHandler += receiver.appEventHandler; } public void RemoveListener(MsgReceiver receiver) { for (int i = 0; i < Receivers.Count; i++) { MsgReceiver item = Receivers[i]; if (item.ReceiverObj == receiver.ReceiverObj) { AppEventHandler -= item.appEventHandler; Receivers.Remove(item); return; } } } #endregion } }