protected void InvokeListenersForWeakEvent(int eventIndex, WeakEventArgs args) { List<WeakReference> listeners = _listeners[eventIndex]; if (listeners.Count > 0) { for (int i = listeners.Count - 1; i >= 0; i--) { if (listeners[i].IsAlive && listeners[i].Target != null) { try { ((IWeakEventTarget)listeners[i].Target).WeakEventNotification(this, _weakEvents[eventIndex], args); } catch(Exception exc) { if (_logger != null) { _logger(1, string.Format("WEAK_EVT_SRC {0}: ERROR NOTIFYING TARGET ({1}) {2}; StackTrace: {3}", _sourceID, exc.GetType(), exc.Message, (exc.StackTrace != null ? exc.StackTrace.Replace("\r", "").Replace("\n", " ") : " -- STACK TRACE NOT AVAILABLE -- "))); } } } else { listeners.RemoveAt(i); } } } }
public WeakEventArgs(object realSource, string eventName, WeakEventArgs originalEventArgs) { RealSource = realSource; EventName = eventName; OriginalEventArgs = originalEventArgs; }