Exemplo n.º 1
0
        private static EventListenerList CreateWeakListener(object target, object state)
        {
            var    eventInfo        = (EventInfo)state;
            var    listenerInternal = new EventListenerList();
            object handler          = eventInfo.EventHandlerType == typeof(EventHandler)
                ? new EventHandler(listenerInternal.Raise)
                : ServiceProvider.ReflectionManager.TryCreateDelegate(eventInfo.EventHandlerType,
                                                                      listenerInternal, EventListenerList.RaiseMethod);

            if (handler == null)
            {
                return(EventListenerList.EmptyListener);
            }
#if NET_STANDARD
            var addMethod = eventInfo.AddMethod;
#else
            var addMethod = eventInfo.GetAddMethod(true);
#endif
            if (addMethod == null)
            {
                return(EventListenerList.EmptyListener);
            }
            addMethod.InvokeEx(target, handler);
            return(listenerInternal);
        }
Exemplo n.º 2
0
        private static EventListenerList CreateContextListener(object src, object state)
        {
            var context          = (IBindingContext)state;
            var listenerInternal = new EventListenerList();

            context.ValueChanged += listenerInternal.Raise;
            return(listenerInternal);
        }
Exemplo n.º 3
0
            public void Dispose()
            {
                EventListenerList listener = _eventListener;
                var weakItem = _weakItem;

                if (listener != null && !weakItem.IsEmpty)
                {
                    _eventListener = null;
                    _weakItem      = WeakEventListenerWrapper.Empty;
                    listener.Remove(weakItem);
                }
            }
Exemplo n.º 4
0
 private IDisposable AddInternal(WeakEventListenerWrapper weakItem, string path)
 {
     lock (this)
     {
         if (_listeners.Length == 0)
         {
             _listeners   = new[] { new KeyValuePair <WeakEventListenerWrapper, string>(weakItem, path) };
             _size        = 1;
             _removedSize = 0;
         }
         else
         {
             if (_removedSize == 0)
             {
                 if (_size == _listeners.Length)
                 {
                     EventListenerList.EnsureCapacity(ref _listeners, _size, _size + 1);
                 }
                 _listeners[_size++] = new KeyValuePair <WeakEventListenerWrapper, string>(weakItem, path);
             }
             else
             {
                 for (int i = 0; i < _size; i++)
                 {
                     if (_listeners[i].Key.IsEmpty)
                     {
                         _listeners[i] = new KeyValuePair <WeakEventListenerWrapper, string>(weakItem, path);
                         --_removedSize;
                         break;
                     }
                 }
             }
         }
     }
     return(new Unsubscriber(this, weakItem, path));
 }
Exemplo n.º 5
0
 static EventListenerList()
 {
     RaiseMethod   = typeof(EventListenerList).GetMethodEx(nameof(Raise), MemberFlags.Public | MemberFlags.Instance);
     EmptyListener = new EventListenerList(true);
 }
Exemplo n.º 6
0
 public Unsubscriber(EventListenerList eventListener, WeakEventListenerWrapper weakItem)
 {
     _eventListener = eventListener;
     _weakItem      = weakItem;
 }