internal void RemoveEventHandler(string name, ScriptObject handler) { if (event_handlers == null) { return; } List <ScriptObjectEventInfo> list; if (!event_handlers.TryGetValue(name, out list)) { return; } for (int i = list.Count - 1; i >= 0; i--) { if (handler == null || list [i].Callback.Handle == handler.Handle) { ScriptObjectEventInfo ei = list [i]; ei.EventInfo.RemoveEventHandler(ManagedObject, ei.GetDelegate()); list.RemoveAt(i); if (handler != null) { return; } } } }
internal void AddEventHandler(string name, ScriptObject handler, EventInfo e) { List <ScriptObjectEventInfo> list; if (event_handlers == null) { event_handlers = new Dictionary <string, List <ScriptObjectEventInfo> >(); } if (!event_handlers.TryGetValue(name, out list)) { list = new List <ScriptObjectEventInfo> (); event_handlers.Add(name, list); } ScriptObjectEventInfo ei = new ScriptObjectEventInfo(name, handler, e); list.Add(ei); ei.EventInfo.AddEventHandler(ManagedObject, ei.GetDelegate()); }