private void ProcessEvents(object sender, DoWorkEventArgs e) { RemoveItems = new List <IEventListener>(); while (!_BackgroundWorker.CancellationPending) { IAction action = Actions.Take(); switch (action.GetActionType()) { case ActionType.OfferEvent: OfferEventAction offerEventAction = (OfferEventAction)action; ProcessOfferEventAction(offerEventAction); break; case ActionType.AddListener: AddListenerAction addListenerAction = (AddListenerAction)action; ProcessAddListenerAction(addListenerAction); break; case ActionType.RemoveListener: RemoveListenerAction removeListenerAction = (RemoveListenerAction)action; ProcessRemoveListenerAction(removeListenerAction); break; } } e.Cancel = true; }
private void ProcessAddListenerAction(AddListenerAction addListenerAction) { if (addListenerAction != null) { IEventListener eventListener = addListenerAction.GetEventListener(); if (eventListener != null) { List <WeakReference <IEventListener> > weakReferences; foreach (EventType eventType in eventListener.GetNotifyTypes()) { if (!EventTypesToListeners.TryGetValue(eventType, out weakReferences)) { weakReferences = new List <WeakReference <IEventListener> >(); } weakReferences.Add(new WeakReference <IEventListener>(eventListener)); EventTypesToListeners.Add(eventType, weakReferences); } } } }