Beispiel #1
0
        internal EventManager Fire(Plugin plugin, string eventName, EventPriority priority, object source, EventArgs args)
        {
            EventIdentity identity = new EventIdentity(eventName, priority);

            List<Task> tasks = new List<Task>();

            if (_strongEvents.ContainsKey(identity))
            {
                foreach (EventHandler handler in _strongEvents[identity])
                {
                    EventHandler localHandler = handler;
                    tasks.Add(Task.Factory.StartNew(() => SafeFire(localHandler, source, args)));
                }
            }
            if (_weakEvents.ContainsKey(identity))
            {
                foreach (EventHandler handler in _weakEvents[identity])
                {
                    EventHandler localHandler = handler;
                    tasks.Add(Task.Factory.StartNew(() => SafeFire(localHandler, source, args)));
                }
            }

            Task.WaitAll(tasks.ToArray());
            return this;
        }
Beispiel #2
0
 public EventManager StrongBind(string eventName, EventPriority priority, EventHandler handler)
 {
     EventIdentity identity = new EventIdentity(eventName, priority);
     if (!_strongEvents.ContainsKey(identity))
     {
         _strongEvents.Add(identity, new HashSet<EventHandler>());
     }
     _strongEvents[identity].Add(handler);
     return this;
 }