Beispiel #1
0
 public ChoWeakEventHandlerState(EventHandler <E> eventHandler, UnregisterCallback <E> unregister)
 {
     _target       = new WeakReference(eventHandler.Target);
     _openHandler  = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);
     _eventHandler = Invoke;
     _unregister   = unregister;
 }
Beispiel #2
0
 /// <summary>
 ///     Gestiona los eventos de multiples propiedades.
 /// </summary>
 public RegisterForImp <TSender> RegisterProperties(Type[] propertyTypes, string[] propertyNames, Func <TSender, object>[] getValues,
                                                    RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register,
                                                    UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister,
                                                    bool valuesToManager = true)
 {
     return(this.RegisterProperties(propertyTypes, propertyNames, getValues, null, register, unregister, valuesToManager));
 }
 /// <summary>
 /// Creates a new object.
 /// </summary>
 /// <param name="eventHandler"></param>
 /// <param name="unregister"></param>
 public WeakEventHandler(EventHandler <E> eventHandler, UnregisterCallback <E> unregister)
 {
     _WeakReference      = new WeakReference(eventHandler.Target);
     _OpenEventHandler   = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);
     _EventHandler       = Invoke;
     _UnregisterCallback = unregister;
 }
Beispiel #4
0
 public WeakEventHandler(EventHandler <E> eventHandler, UnregisterCallback <E> unregister)
 {
     _TargetRef   = new WeakReference(eventHandler.Target);
     _OpenHandler = (OpenEventHandler)eventHandler.GetMethodInfo().CreateDelegate(typeof(OpenEventHandler), null);
     _Handler     = Invoke;
     _Unregister  = unregister;
 }
Beispiel #5
0
 /// <summary>
 /// Initializes a new instance of the WeakEventHandler
 /// </summary>
 /// <param name="eventHandler">event handler to hook up</param>
 /// <param name="unregister">callback to unregister the event handler</param>
 public WeakEventHandler(EventHandler <E> eventHandler, UnregisterCallback <E> unregister = null)
 {
     this.reference   = new WeakReference(eventHandler.Target);
     this.openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);
     this.handler     = Invoke;
     this.unregister  = unregister;
 }
Beispiel #6
0
        /// <summary>
        ///     Crea un handler debil para eventos de tipo <c>TEventHandler</c>,
        /// </summary>
        /// <param name="eventHandler">Handler origen.</param>
        /// <param name="unregister">Delegado para deregistrar el evento.</param>
        /// <returns>Handler debil.</returns>
        public static IWeakEventHandler <TEventHandler> MakeWeak <TEventHandler, TEventArgs>(
            TEventHandler eventHandler,
            UnregisterCallback <TEventHandler> unregister)
            where TEventArgs : EventArgs
        {
            Delegate delEventHandler = eventHandler as Delegate;

            Contract.Requires(delEventHandler != null);
            // Only instance methods are supported.
            Contract.Requires(!delEventHandler.Method.IsStatic && delEventHandler.Target != null);

            Type wehType = typeof(WeakEventHandler <, ,>).MakeGenericType(
                delEventHandler.Method.DeclaringType,
                typeof(TEventHandler),
                typeof(TEventArgs));

            ConstructorInfo wehConstructor = wehType.GetConstructor(new[]
            {
                typeof(TEventHandler),
                typeof(UnregisterCallback <TEventHandler>)
            });

            Contract.Assert(wehConstructor != null);

            IWeakEventHandler <TEventHandler> weh = (IWeakEventHandler <TEventHandler>)wehConstructor.Invoke(new object[]
            {
                eventHandler,
                unregister
            });

            return(weh);
        }
Beispiel #7
0
 /// <summary>
 ///     Gestiona los eventos de una lista.
 /// </summary>
 public RegisterForImp <TSender> RegisterList <TItem>(Func <TSender, IList <TItem> > getValues,
                                                      RegisterCallback <TSender, EventHandler_v2 <ListEventArgs> > register,
                                                      UnregisterCallback <TSender, EventHandler_v2 <ListEventArgs> > unregister,
                                                      bool valuesToManager = true)
 {
     return(this.RegisterList(getValues, null, register, unregister, valuesToManager));
 }
 public AnotherWeakEventHandler(EventHandler <E> eventHandler, UnregisterCallback <E> unregister)
 {
     m_TargetRef   = new WeakReference(eventHandler.Target);
     m_OpenHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);
     m_Handler     = Invoke;
     m_Unregister  = unregister;
 }
 /// <summary>
 /// Creates a new weak event handler.
 /// </summary>
 /// <param name="eventHandler">The event handler to wrap</param>
 /// <param name="unregister">A callback that will unsubscribe the handler once its target is garbage collected</param>
 public WeakEventHandler(EventHandler <TArgs> eventHandler, UnregisterCallback <TArgs> unregister)
 {
     _targetRef   = new WeakReference(eventHandler.Target);
     _openHandler = (OpenEventHandler)Delegate.CreateDelegate(openEventHandlerType, null, eventHandler.Method);
     _handler     = Invoke;
     _unregister  = unregister;
 }
Beispiel #10
0
        /// <summary>
        /// Sxtesion method for EventHandler<E>
        /// </summary>
        /// <typeparam name="E">The type</typeparam>
        /// <param name="eventHandler">The EventHandler</param>
        /// <param name="unregister">EventHandler unregister delegate</param>
        /// <returns>An EventHandler</returns>
        public static EventHandler <E> MakeWeak <E>(this EventHandler <E> eventHandler,
                                                    UnregisterCallback <E> unregister) where E : System.EventArgs
        {
            if (eventHandler == null)
            {
                throw new ArgumentNullException("eventHandler");
            }

            if (eventHandler.Method.IsStatic || eventHandler.Target == null)
            {
                throw new ArgumentException("Only instance methods are supported.", "eventHandler");
            }

            Type wehType = typeof(WeakEventHandler <,>).MakeGenericType(
                eventHandler.Method.DeclaringType, typeof(E));

            ConstructorInfo wehConstructor =
                wehType.GetConstructor(new Type[] { typeof(EventHandler <E>),
                                                    typeof(UnregisterCallback <E>) });

            IWeakEventHandler <E> weh = (IWeakEventHandler <E>)wehConstructor.Invoke(
                new object[] { eventHandler, unregister });

            return(weh.Handler);
        }
Beispiel #11
0
        /// <summary>
        /// 対象がGC可能な弱い参照を持つイベントハンドラを作成します。
        /// </summary>
        public static EventHandler <TEventArgs> MakeWeak <TEventArgs>(
            this EventHandler <TEventArgs> eventHandler,
            UnregisterCallback <TEventArgs> unregister)
            where TEventArgs : EventArgs
        {
            if (eventHandler == null)
            {
                throw new ArgumentNullException("eventHandler");
            }

            if (eventHandler.Method.IsStatic || eventHandler.Target == null)
            {
                // staticメソッドの場合はそのまま返します。
                return(eventHandler);
            }

            var wehType = typeof(WeakEventHandler <,>).MakeGenericType(
                eventHandler.Method.DeclaringType, typeof(TEventArgs));

            var weh = (IWeakEventHandler <TEventArgs>)Activator.CreateInstance(
                wehType,
                new object[]
            {
                eventHandler,
                unregister,
            });

            return(weh.Handler);
        }
Beispiel #12
0
 /// <summary>
 ///     Gestiona los eventos de una propiedad.
 /// </summary>
 public RegisterForImp <TSender> RegisterProperty <TItem>(string propertyName, Func <TSender, TItem> getValue,
                                                          RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register,
                                                          UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister,
                                                          bool valuesToManager = true)
 {
     return(this.RegisterProperty(propertyName, getValue, null, register, unregister, valuesToManager));
 }
Beispiel #13
0
 public WeakEventHandler(EventHandler <TData> eventHandler, UnregisterCallback <TData> unregister)
 {
     _TargetRef   = new WeakReference(eventHandler.Target);
     _OpenHandler = (OpenEventHandler)eventHandler.CreateDelegate(typeof(OpenEventHandler), (object)null);
     _Handler     = Invoke;
     _Unregister  = unregister;
 }
Beispiel #14
0
 /// <summary>
 ///     Crea un handler debil para eventos de tipo <c>EventHandler</c>,
 /// </summary>
 /// <param name="eventHandler">Handler origen.</param>
 /// <param name="register">Delegado para registrar el evento.</param>
 /// <param name="unregister">Delegado para deregistrar el evento.</param>
 /// <returns>Handler debil.</returns>
 public static IWeakEventHandler <EventHandler> WeakListen(
     this EventHandler eventHandler,
     RegisterCallback <EventHandler> register,
     UnregisterCallback <EventHandler> unregister)
 {
     return(WeakListen <EventHandler, EventArgs>(eventHandler, register, unregister));
 }
Beispiel #15
0
 /// <summary>
 ///     Crea un handler debil para eventos de tipo <c>EventHandler_v2</c>,
 /// </summary>
 /// <param name="eventHandler">Handler origen.</param>
 /// <param name="unregister">Delegado para deregistrar el evento.</param>
 /// <returns>Handler debil.</returns>
 public static IWeakEventHandler <EventHandler_v2 <T> > MakeWeak <T>(
     this EventHandler_v2 <T> eventHandler,
     UnregisterCallback <EventHandler_v2 <T> > unregister)
     where T : EventArgs
 {
     return(MakeWeak <EventHandler_v2 <T>, T>(eventHandler, unregister));
 }
Beispiel #16
0
 public AllPropertiesListener(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler,
                              RegisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > register,
                              UnregisterCallback <EventHandler_v2 <PropertyChangedExEventArgs> > unregister,
                              bool valuesToManager)
     : base(eventHandler, register, unregister)
 {
     this.ValuesToManager = valuesToManager;
 }
Beispiel #17
0
 public EventListener_v2(EventHandler_v2 <TEventArgs> eventHandler,
                         RegisterCallback <EventHandler_v2 <TEventArgs> > register,
                         UnregisterCallback <EventHandler_v2 <TEventArgs> > unregister)
 {
     this.register     = register;
     this.unregister   = unregister;
     this.eventHandler = eventHandler;
 }
Beispiel #18
0
 public EventListener(EventHandler eventHandler,
                      RegisterCallback <EventHandler> register,
                      UnregisterCallback <EventHandler> unregister)
 {
     this.eventHandler = eventHandler;
     this.register     = register;
     this.unregister   = unregister;
 }
Beispiel #19
0
 /// <summary>
 ///     Crea un handler debil para eventos de tipo <c>EventHandler_v2</c>,
 /// </summary>
 /// <param name="eventHandler">Handler origen.</param>
 /// <param name="register">Delegado para registrar el evento.</param>
 /// <param name="unregister">Delegado para deregistrar el evento.</param>
 /// <returns>Handler debil.</returns>
 public static IWeakEventHandler <EventHandler_v2 <T> > WeakListen <T>(
     this EventHandler_v2 <T> eventHandler,
     RegisterCallback <EventHandler_v2 <T> > register,
     UnregisterCallback <EventHandler_v2 <T> > unregister)
     where T : EventArgs
 {
     return(WeakListen <EventHandler_v2 <T>, T>(eventHandler, register, unregister));
 }
 public ForSource <TSource> RegisterWeak(string name,
                                         EventHandler eventHandler,
                                         RegisterCallback <TSource, EventHandler> register,
                                         UnregisterCallback <TSource, EventHandler> unregister)
 {
     this.manager.RegisterWeak <TSource, EventHandler, EventArgs>(name, eventHandler, register, unregister);
     return(this);
 }
 public ForSource <TSource> RegisterWeak(string name,
                                         EventHandler <PropertyChangedExEventArgs> eventHandler,
                                         RegisterCallback <TSource, EventHandler <PropertyChangedExEventArgs> > register,
                                         UnregisterCallback <TSource, EventHandler <PropertyChangedExEventArgs> > unregister)
 {
     this.manager.RegisterWeak <TSource, EventHandler <PropertyChangedExEventArgs>, PropertyChangedExEventArgs>(name, eventHandler, register, unregister);
     return(this);
 }
Beispiel #22
0
            /// <summary>
            ///     Constructor.
            /// </summary>
            /// <param name="eventHandler">Handler origen.</param>
            /// <param name="unregister">Delegado para deregistrar el evento.</param>
            public WeakEventHandler(TEventHandler eventHandler, UnregisterCallback <TEventHandler> unregister)
            {
                Delegate delEventHandler = (Delegate)(object)eventHandler;

                this.targetRef   = new WeakReference(delEventHandler.Target);
                this.openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, delEventHandler.Method);
                this.handler     = (TEventHandler)(object)Delegate.CreateDelegate(typeof(TEventHandler), this, invokeMth);
                this.unregister  = unregister;
            }
 public ForSource <TSource> RegisterWeak <TEventArgs>(string name,
                                                      EventHandler_v2 <TEventArgs> eventHandler,
                                                      RegisterCallback <TSource, EventHandler_v2 <TEventArgs> > register,
                                                      UnregisterCallback <TSource, EventHandler_v2 <TEventArgs> > unregister)
     where TEventArgs : EventArgs
 {
     this.manager.RegisterWeak <TSource, EventHandler_v2 <TEventArgs>, TEventArgs>(name, eventHandler, register, unregister);
     return(this);
 }
Beispiel #24
0
        public WeakEventHandler(EventHandler <TE> eventHandler, UnregisterCallback <TE> unregister)
        {
            _mTargetRef = new WeakReference(eventHandler.Target);

            _mOpenHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);

            _mHandler    = Invoke;
            _mUnregister = unregister;
        }
Beispiel #25
0
 public ListListener(EventHandler_v2 <ListEventArgs> eventHandler,
                     Func <object, IList <TItem> > getValues,
                     RegisterCallback <EventHandler_v2 <ListEventArgs> > register,
                     UnregisterCallback <EventHandler_v2 <ListEventArgs> > unregister,
                     bool valuesToManager)
     : base(eventHandler, register, unregister)
 {
     this.ValuesToManager = valuesToManager;
     this.getValues       = getValues;
 }
Beispiel #26
0
 /// <summary>
 ///     Gestiona los eventos genericos.
 /// </summary>
 public RegisterForImp <TSender> Register(EventHandler eventHandler,
                                          RegisterCallback <TSender, EventHandler> register,
                                          UnregisterCallback <TSender, EventHandler> unregister)
 {
     ListenerManager.EventListener listener = new ListenerManager.EventListener(eventHandler,
                                                                                (sender, h) => register((TSender)sender, h),
                                                                                (sender, h) => unregister((TSender)sender, h));
     this.manager.Add <TSender>(listener);
     return(this);
 }
Beispiel #27
0
        /// <summary>
        ///     Escucha con un handler debil para eventos de tipo <c>TEventHandler</c>,
        /// </summary>
        /// <param name="eventHandler">Handler origen.</param>
        /// <param name="register">Delegado para registrar el evento.</param>
        /// <param name="unregister">Delegado para deregistrar el evento.</param>
        /// <returns>Handler debil.</returns>
        public static IWeakEventHandler <TEventHandler> WeakListen <TEventHandler, TEventArgs>(
            TEventHandler eventHandler,
            RegisterCallback <TEventHandler> register,
            UnregisterCallback <TEventHandler> unregister)
            where TEventArgs : EventArgs
        {
            IWeakEventHandler <TEventHandler> weak = MakeWeak <TEventHandler, TEventArgs>(eventHandler, unregister);

            register(weak.Handler);
            return(weak);
        }
Beispiel #28
0
        /// <summary>
        /// Initializes a new instance of the WeakEventHandler
        /// </summary>
        /// <param name="eventHandler">event handler to hook up</param>
        /// <param name="unregister">callback to unregister the event handler</param>
        public WeakEventHandler(EventHandler <TArgs> eventHandler, UnregisterCallback <TArgs> unregister = null)
        {
#if WINRT
            throw new NotImplementedException();
#else
            this.reference   = new WeakReference(eventHandler.Target);
            this.openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, eventHandler.Method);
            this.handler     = Invoke;
            this.unregister  = unregister;
#endif
        }
Beispiel #29
0
 /// <summary>
 ///     Gestiona los eventos genericos.
 /// </summary>
 public RegisterForImp <TSender> Register <TEventArgs>(EventHandler_v2 <TEventArgs> eventHandler,
                                                       RegisterCallback <TSender, EventHandler_v2 <TEventArgs> > register,
                                                       UnregisterCallback <TSender, EventHandler_v2 <TEventArgs> > unregister)
     where TEventArgs : EventArgs
 {
     ListenerManager.EventListener_v2 <TEventArgs> listener = new ListenerManager.EventListener_v2 <TEventArgs>(eventHandler,
                                                                                                                (sender, h) => register((TSender)sender, h),
                                                                                                                (sender, h) => unregister((TSender)sender, h));
     this.manager.Add <TSender>(listener);
     return(this);
 }
Beispiel #30
0
            /// <summary>
            ///     Gestiona los eventos de multiples propiedades.
            /// </summary>
            public RegisterForImp <TSender> RegisterAllProperties(EventHandler_v2 <PropertyChangedExEventArgs> eventHandler,
                                                                  RegisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > register,
                                                                  UnregisterCallback <TSender, EventHandler_v2 <PropertyChangedExEventArgs> > unregister,
                                                                  bool valuesToManager = false)
            {
                ListenerManager.AllPropertiesListener listener = new ListenerManager.AllPropertiesListener(eventHandler,
                                                                                                           (sender, h) => register((TSender)sender, h),
                                                                                                           (sender, h) => unregister((TSender)sender, h),
                                                                                                           valuesToManager);

                this.manager.Add <TSender>(listener);
                return(this);
            }