/// <summary> /// 移除已经注册的消息句柄; /// </summary> /// <param name="varMsgID"></param> /// <param name="varFunc"></param> protected void UnRegisterMsgHandler(int varMsgID, EventFuntion varFunc) { if (varFunc == null || mMsgHandlers.Count == 0) { return; } List <EventFuntion> tmpFuns; if (mMsgHandlers.TryGetValue(varMsgID, out tmpFuns) == false) { return; } for (int i = tmpFuns.Count - 1; i >= 0; --i) { EventFuntion tmpFun = tmpFuns[i]; if (tmpFun == null || tmpFun.Target == null) { mDeleteMsgHandlers.Add(tmpFun); continue; } if (varFunc != null && tmpFun.Target == varFunc.Target) { mDeleteMsgHandlers.Add(tmpFun); return; } } }
private List <EventFuntion> RemoveDeleteMsg(List <EventFuntion> varFunList) { if (mMsgHandlers.Count != 0 && varFunList != null) { for (int i = 0; i < varFunList.Count;) { EventFuntion temRem = varFunList[i]; bool tempExist = false; for (int j = 0; j < mDeleteMsgHandlers.Count;) { if (mDeleteMsgHandlers[j] == temRem) { tempExist = true; mDeleteMsgHandlers.RemoveAt(j); continue; } if (mDeleteMsgHandlers[j] == null || mDeleteMsgHandlers[j].Target == null) { mDeleteMsgHandlers.RemoveAt(j); continue; } j++; } if (tempExist) { varFunList.RemoveAt(i); continue; } i++; } } return(varFunList); }
/// <summary> /// 移除已经注册的消息句柄 /// </summary> /// <param name="varMsgID"></param> /// <param name="varFunc"></param> public void UnRegisterMsgHandler(int varMsgID, EventFuntion varFunc) { List <EventFuntion> tmpFuns = null; if (mMsgHandlers.TryGetValue(varMsgID, out tmpFuns)) { if (tmpFuns != null && tmpFuns.Count > 0) { for (int i = tmpFuns.Count - 1; i >= 0; --i) { EventFuntion tmpFun = tmpFuns[i]; if (tmpFun == null || tmpFun.Target == null) { mDeleteMsgHandlers.Add(tmpFun); //tmpFuns.Remove(tmpFun); continue; } if (varFunc != null && tmpFun.Target == varFunc.Target) { mDeleteMsgHandlers.Add(tmpFun); //tmpFuns.Remove(tmpFun); return; } } } } }
/// <summary> /// 注册消息句柄 /// </summary> /// <param name="varMsgID"></param> /// <param name="varFunc"></param> public void RegisterMsgHandler(int varMsgID, EventFuntion varFunc) { if (varFunc == null) { return; } if (mMsgHandlers == null) { mMsgHandlers = new Dictionary <int, List <EventFuntion> >(); } List <EventFuntion> tmpFuns = null; if (mMsgHandlers.TryGetValue((int)varMsgID, out tmpFuns) == false) { tmpFuns = new List <EventFuntion>(); mMsgHandlers.Add((int)varMsgID, tmpFuns); } else { tmpFuns = RemoveDeleteMsg(tmpFuns); } for (int i = 0; i < tmpFuns.Count; i++) { EventFuntion func = tmpFuns[i]; if (func == varFunc) { return; } } tmpFuns.Add(varFunc); }
/// <summary> /// 注册消息句柄; /// </summary> /// <param name="varMsgID"></param> /// <param name="varFunc"></param> protected void RegisterMsgHandler(int varMsgID, EventFuntion varFunc) { if (varFunc == null) { return; } List <EventFuntion> tmpFuns; if (mMsgHandlers.Count == 0 || mMsgHandlers.TryGetValue(varMsgID, out tmpFuns) == false) { tmpFuns = new List <EventFuntion>(); mMsgHandlers.Add(varMsgID, tmpFuns); } else { if (tmpFuns != null) { for (int i = 0; i < mDeleteMsgHandlers.Count; i++) { EventFuntion temRem = mDeleteMsgHandlers[i]; if (tmpFuns.Contains(temRem) == true) { tmpFuns.Remove(temRem); mDeleteMsgHandlers.RemoveAt(i); i--; } } } } for (int i = 0; i < tmpFuns.Count; i++) { EventFuntion func = tmpFuns[i]; if (func == varFunc) { return; } } tmpFuns.Add(varFunc); }
/// <summary> /// 事件广播; /// </summary> /// <param name="varMsgID"></param> /// <param name="varEvent"></param> protected void NotifyEvent(int varMsgID, BaseEvent varEvent) { List <EventFuntion> tmpFuncs; if (mMsgHandlers.Count == 0 || mMsgHandlers.TryGetValue(varMsgID, out tmpFuncs) == false) { return; } if (tmpFuncs == null) { return; } for (int i = 0; i < mDeleteMsgHandlers.Count; i++) { EventFuntion temRem = mDeleteMsgHandlers[i]; if (tmpFuncs.Contains(temRem) == true) { tmpFuncs.Remove(temRem); mDeleteMsgHandlers.RemoveAt(i); i--; } } if (tmpFuncs.Count > 0) { for (int i = 0; i < tmpFuncs.Count; i++) { EventFuntion tmpFunc = tmpFuncs[i]; if (tmpFunc == null || tmpFunc.Target == null) { mDeleteMsgHandlers.Add(tmpFunc); } else { tmpFunc(varEvent); } } } }
/// <summary> /// 事件广播 /// </summary> /// <param name="varMsgID"></param> /// <param name="varEvent"></param> public void NotifyEvent(int varMsgID, BaseEvent varEvent) { List <EventFuntion> tmpFuncs = null; if (mMsgHandlers.TryGetValue(varMsgID, out tmpFuncs)) { tmpFuncs = RemoveDeleteMsg(tmpFuncs); if (tmpFuncs != null && tmpFuncs.Count > 0) { for (int i = 0; i < tmpFuncs.Count; i++) { EventFuntion tmpFunc = tmpFuncs[i]; if (tmpFunc == null || tmpFunc.Target == null) { mDeleteMsgHandlers.Add(tmpFunc); } else { tmpFunc(varEvent); } } } } }