/// <summary> /// Remove listener. /// </summary> public void RemoveListener(IDictionaryEventListener listener) { var hashCode = listener.GetHashCode(); if (!listenersHashCodes.TryGetValue(hashCode, out var hashCodes)) { return; } var wr = hashCodes.FirstOrDefault(l => l.Target == listener); if (wr == null) { return; } if (hashCodes.Count > 1) { hashCodes.Remove(wr); } else { listenersHashCodes.Remove(hashCode); } listeners.Remove(wr); }
/// <summary> /// Adds a listener to the inner list of listeners. /// </summary> /// <param name="listener">The listener to add.</param> internal static void AddListener(IDictionaryEventListener listener) { if (listener == null) { return; } // Check, if this listener already was added. var listenerExists = false; lock (ListenersLock) { foreach (var wr in Listeners.ToList()) { var targetReference = wr.Target; if (targetReference == null) { Listeners.Remove(wr); } else if (targetReference == listener) { listenerExists = true; } } // Add it now. if (!listenerExists) { Listeners.Add(new WeakReference(listener)); } } }
/// <summary> /// Adds a listener to the inner list of listeners. /// </summary> /// <param name="listener">The listener to add.</param> internal static void AddListener(IDictionaryEventListener listener) { if (listener == null) { return; } listeners.Add(new WeakReference(listener)); }
/// <summary> /// Add new listener. /// </summary> public void AddListener(IDictionaryEventListener listener) { // Add listener if it not registered yet. var weakReference = new WeakReference(listener); var hashCode = listener.GetHashCode(); if (!listenersHashCodes.TryGetValue(hashCode, out var sameHashCodeListeners)) { listeners.Add(weakReference, hashCode); listenersHashCodes.Add(hashCode, new List <WeakReference> { weakReference }); } else if (sameHashCodeListeners.All(wr => wr.Target != listener)) { listeners.Add(weakReference, hashCode); sameHashCodeListeners.Add(weakReference); } }
/// <summary> /// Removes a listener from the inner list of listeners. /// </summary> /// <param name="listener">The listener to remove.</param> internal static void RemoveListener(IDictionaryEventListener listener) { if (listener == null) { return; } List <WeakReference> purgeList = new List <WeakReference>(); foreach (WeakReference wr in listeners) { if (!wr.IsAlive) { purgeList.Add(wr); } else if ((IDictionaryEventListener)wr.Target == listener) { purgeList.Add(wr); } } }
/// <summary> /// Removes a listener from the inner list of listeners. /// </summary> /// <param name="listener">The listener to remove.</param> internal static void RemoveListener(IDictionaryEventListener listener) { if (listener == null) { return; } lock (listenersLock) { foreach (var wr in listeners.ToList()) { if (!wr.IsAlive) { listeners.Remove(wr); } else if ((IDictionaryEventListener)wr.Target == listener) { listeners.Remove(wr); } } } }
/// <summary> /// Removes a listener from the inner list of listeners. /// </summary> /// <param name="listener">The listener to remove.</param> internal static void RemoveListener(IDictionaryEventListener listener) { if (listener == null) { return; } lock (listenersLock) { foreach (var wr in listeners.ToList()) { var targetReference = wr.Target; if (targetReference == null) { listeners.Remove(wr); } else if ((IDictionaryEventListener)targetReference == listener) { listeners.Remove(wr); } } } }
/// <summary> /// Removes a listener from the inner list of listeners. /// </summary> /// <param name="listener">The listener to remove.</param> internal static void RemoveListener(IDictionaryEventListener listener) { if (listener == null) return; lock (listenersLock) { foreach (var wr in listeners.ToList()) { if (!wr.IsAlive) listeners.Remove(wr); else if ((IDictionaryEventListener)wr.Target == listener) listeners.Remove(wr); } } }
/// <summary> /// Adds a listener to the inner list of listeners. /// </summary> /// <param name="listener">The listener to add.</param> internal static void AddListener(IDictionaryEventListener listener) { if (listener == null) return; // Check, if this listener already was added. bool listenerExists = false; lock (listenersLock) { foreach (var wr in listeners.ToList()) { if (!wr.IsAlive) listeners.Remove(wr); else if (wr.Target == listener) listenerExists = true; } // Add it now. if (!listenerExists) listeners.Add(new WeakReference(listener)); } }
/// <summary> /// Removes a listener from the inner list of listeners. /// </summary> /// <param name="listener">The listener to remove.</param> internal static void RemoveListener(IDictionaryEventListener listener) { if (listener == null) return; List<WeakReference> purgeList = new List<WeakReference>(); foreach (WeakReference wr in listeners) { if (!wr.IsAlive) purgeList.Add(wr); else if ((IDictionaryEventListener)wr.Target == listener) purgeList.Add(wr); } Purge(purgeList); }
/// <summary> /// Adds a listener to the inner list of listeners. /// </summary> /// <param name="listener">The listener to add.</param> internal static void AddListener(IDictionaryEventListener listener) { if (listener == null) return; // Check, if this listener already was added. List<WeakReference> purgeList = new List<WeakReference>(); bool listenerExists = false; foreach (var wr in listeners) { if (!wr.IsAlive) purgeList.Add(wr); else if (wr.Target == listener) listenerExists = true; } Purge(purgeList); // Add it now. if (!listenerExists) listeners.Add(new WeakReference(listener)); }
/// <summary> /// Adds a listener to the inner list of listeners. /// </summary> /// <param name="listener">The listener to add.</param> internal static void AddListener(IDictionaryEventListener listener) { if (listener == null) return; listeners.Add(new WeakReference(listener)); }