public void RemoveEventListener(EventType type, EventDispatcher listener, EVENT_FUNCTION callback) { lock (gListenerDict) { for (var i = 0; i < mListListener.Count; i++) { LISTENER item = mListListener[i]; if (item.Type == type && item.Function == callback && item.Listener.Target == listener) { if (mListListener.Count == 1) { for (var j = 0; j < listener.mListListenTo.Count; j++) { if (listener.mListListenTo[j].Target == this) { listener.mListListenTo.RemoveAt(j); j--; break; } } gListenerDict.Remove(this); } mListListener.Remove(item); i--; break; } } } }
public void AddEventListener(EventType type, EventDispatcher listener, EVENT_FUNCTION callback) { lock (gListenerDict) { LISTENER listen = new LISTENER(); listen.Type = type; listen.Listener = new WeakReference(listener); listen.Function = callback; RemoveEventListener(type, listener, callback); if (!gListenerDict.ContainsKey(this)) { gListenerDict[this] = new Dictionary <EventDispatcher, int>(); } gListenerDict[this][listener] = 0; mListListener.Add(listen); foreach (var item in listener.mListListenTo) { if (item.Target == this) { return; } } listener.mListListenTo.Add(new WeakReference(this)); } }