Exemplo n.º 1
0
 public WeakEventHandlerGeneric(H eventHandler, UnregisterDelegate <H> unregister)
 {
     _targetRef   = new WeakReference((eventHandler as Delegate).Target);
     _openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, (eventHandler as Delegate).Method);
     _handler     = CastDelegate(new LocalHandler(Invoke));
     _unregister  = unregister;
 }
Exemplo n.º 2
0
        public WeakEventHandlerGeneric(H eventHandler, UnregisterDelegate <H> unregister)
        {
            this._targetRef   = new WeakReference((eventHandler as Delegate).Target);
            this._openHandler = (WeakEventHandlerGeneric <T, E, H> .OpenEventHandler)Delegate.CreateDelegate(typeof(WeakEventHandlerGeneric <T, E, H> .OpenEventHandler), null, (eventHandler as Delegate).Method);
            this._handler     = WeakEventHandlerGeneric <T, E, H> .CastDelegate(new WeakEventHandlerGeneric <T, E, H> .LocalHandler(this.Invoke));

            this._unregister = unregister;
        }
Exemplo n.º 3
0
        private void Invoke(object sender, TEventArgs e)
        {
            var target = (T)m_TargetRef.Target;

            if (target != null)
            {
                m_OpenHandler.Invoke(target, sender, e);
            }
            else if (m_Unregister != null)
            {
                m_Unregister(m_Handler);
                m_Unregister = null;
            }
        }
Exemplo n.º 4
0
        private void Invoke(object sender, E e)
        {
            T target = (T)_targetRef.Target;

            if (target != null)
            {
                _openHandler.Invoke(target, sender, e);
            }
            else if (_unregister != null)
            {
                _unregister(_handler);
                _unregister = null;
            }
        }
Exemplo n.º 5
0
        private void Invoke(object sender, E e)
        {
            T t = (T)((object)this._targetRef.Target);

            if (t != null)
            {
                this._openHandler(t, sender, e);
                return;
            }
            if (this._unregister != null)
            {
                this._unregister(this._handler);
                this._unregister = null;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Makes a property change handler weak
        /// </summary>
        /// <typeparam name="E"></typeparam>
        /// <param name="eventHandler">The event handler.</param>
        /// <param name="unregister">The unregister.</param>
        /// <returns></returns>
        public static PropertyChangedEventHandler MakeWeak(this PropertyChangedEventHandler eventHandler,
                                                           UnregisterDelegate <PropertyChangedEventHandler> unregister)
        {
            CheckArgs(eventHandler, unregister);

            Type generalType      = typeof(WeakPropertyChangeHandler <>);
            var  genericTypes     = new[] { eventHandler.Method.DeclaringType };
            var  constructorTypes = new[]
            {
                typeof(PropertyChangedEventHandler),
                typeof(UnregisterDelegate <PropertyChangedEventHandler>)
            };
            var constructorArgs = new object[] { eventHandler, unregister };

            return
                (((IWeakPropertyChangedEventHandler)
                  GetWeakHandler(generalType, genericTypes, constructorTypes, constructorArgs)).Handler);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Makes a generic handler weak
        /// </summary>
        /// <typeparam name="TEventArgs"></typeparam>
        /// <param name="eventHandler">The event handler.</param>
        /// <param name="unregister">The unregister.</param>
        /// <returns></returns>
        public static EventHandler <TEventArgs> MakeWeak <TEventArgs>(this EventHandler <TEventArgs> eventHandler,
                                                                      UnregisterDelegate <EventHandler <TEventArgs> >
                                                                      unregister) where TEventArgs : EventArgs
        {
            CheckArgs(eventHandler, unregister);

            Type generalType      = typeof(WeakEventHandler <,>);
            var  genericTypes     = new[] { eventHandler.Method.DeclaringType, typeof(TEventArgs) };
            var  constructorTypes = new[]
            {
                typeof(EventHandler <TEventArgs>),
                typeof(UnregisterDelegate <EventHandler <TEventArgs> >)
            };
            var constructorArgs = new object[] { eventHandler, unregister };

            return
                (((IWeakEventHandler <TEventArgs>)
                  GetWeakHandler(generalType, genericTypes, constructorTypes, constructorArgs)).Handler);
        }
Exemplo n.º 8
0
 public WeakPropertyChangeHandler(PropertyChangedEventHandler eventHandler, UnregisterDelegate <PropertyChangedEventHandler> unregister) : base(eventHandler, unregister)
 {
 }
Exemplo n.º 9
0
 public WeakEventHandler(EventHandler <E> eventHandler, UnregisterDelegate <EventHandler <E> > unregister)
     : base(eventHandler, unregister)
 {
 }