コード例 #1
0
        /// <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);
        }
コード例 #2
0
            /// <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));
                    }
                }
            }
コード例 #3
0
            /// <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));
            }
コード例 #4
0
        /// <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);
            }
        }
コード例 #5
0
            /// <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);
                    }
                }
            }
コード例 #6
0
            /// <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);
                        }
                    }
                }
            }
コード例 #7
0
            /// <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);
                        }
                    }
                }
            }
コード例 #8
0
            /// <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);
                    }
                }
            }
コード例 #9
0
            /// <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));
                }
            }
コード例 #10
0
            /// <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);
            }
コード例 #11
0
            /// <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));
            }
コード例 #12
0
            /// <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));
            }