예제 #1
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;
 }
예제 #2
0
파일: Events.cs 프로젝트: rjamesnw/CoreXT
 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;
 }
예제 #3
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;
 }
 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;
 }
예제 #5
0
파일: Events.cs 프로젝트: rjamesnw/CoreXT
 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;
 }
예제 #6
0
 /// <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;
 }
예제 #7
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;
 }
예제 #8
0
 public WeakCollectionChangedHandlerImpl(NotifyCollectionChangedEventHandler event_handler, Action <NotifyCollectionChangedEventHandler> unregister)
 {
     m_target_ref   = new WeakReference(event_handler.Target);
     m_open_handler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, event_handler.Method);
     m_unregister   = unregister;
     Handler        = Invoke;
 }
예제 #9
0
 public WeakEventHandler(EventHandler <TEventArgs> eventHandler, UnregisterCallback <TEventArgs> unregister)
 {
     _targetRef   = new WeakReference(eventHandler.Target);
     _openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler),
                                                              null, eventHandler.Method);
     _handler    = Invoke;
     _unregister = unregister;
 }
예제 #10
0
        public WeakEventHandler(EventHandler handler, Action <EventHandler> unregister)
        {
            Contract.Requires <ArgumentNullException>(handler != null, "handler");

            _target      = new WeakReference(handler.Target);
            _openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, handler.Method);
            _handler     = Invoke;
            _unregister  = unregister;
        }
예제 #11
0
        public WeakEventHandler([NotNull] EventHandler <TEventArgs> handler, Action <EventHandler <TEventArgs> > unregister)
        {
            Requires.NotNull(handler, nameof(handler));

            _target      = new WeakReference(handler.Target);
            _openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, handler.Method);
            _handler     = Invoke;
            _unregister  = unregister;
        }
예제 #12
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
        }
예제 #13
0
            public WeakDelegate(Delegate handler)
            {
                _weakTarget = handler.Target != null ? new WeakReference(handler.Target) : null;
            #if NET40 || NET45
                _method = handler.Method;
            #else
                _method = handler.GetMethodInfo();
            #endif

                _openHandler = _openHandlerCache.GetOrAdd(_method, CreateOpenHandler);
            }
    public WeakEventHandler(EventHandler <TE> subscriber, Action <WeakEventHandler <TE> > unsubscriber)
    {
        _unsubscriber = unsubscriber;
        _targetRef    = new WeakReference(subscriber.Target);
        _handler      = Invoke;
        var target = Expression.Parameter(typeof(object), "target");
        var sender = Expression.Parameter(typeof(object), "sender");
        var args   = Expression.Parameter(typeof(TE), "args");

        _openHandler =
            Expression.Lambda <OpenEventHandler>(
                Expression.Call(Expression.Convert(target, subscriber.Target.GetType()), subscriber.Method, sender,
                                args), target, sender, args).Compile();
    }
예제 #15
0
            public WeakEventHandler(EventHandler <TEventArgs> handler)
            {
                handler.ArgumentNotNull(nameof(handler));
                if (handler.Method.IsStatic)
                {
                    throw new EventHandlerMustNotHaveStaticMethodArgumentException(nameof(handler), null, null);
                }

                if (handler.Method.IsNull())
                {
                    throw new EventHandlerMustNotHaveNullMethodArgumentException(nameof(handler), null, null);
                }

                _targetReference = new WeakReference(handler.Target);
                _openHandler     = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, handler.Method);
            }
        public WeakEventHandler(EventHandler <TEventArgs> strongEventHandler, Action <EventHandler <TEventArgs> > unregister)
        {
            if (unregister == null)
            {
                throw new ArgumentNullException("unregister");
            }
            if (!(strongEventHandler.Target is TSubscriber))
            {
                throw new ArgumentException("Expected event handler declaring type to be " + typeof(TSubscriber) + ", got " + strongEventHandler.Target.GetType(), "strongEventHandler");
            }

#if NET45
            _target = new WeakReference <TSubscriber>((TSubscriber)strongEventHandler.Target);
#else
            _target = new WeakReference(strongEventHandler.Target);
#endif
            _openHandler = (OpenEventHandler)Delegate.CreateDelegate(typeof(OpenEventHandler), null, strongEventHandler.Method);
            _unregister  = unregister;
        }
예제 #17
0
 public WeakDelegate(Delegate handler)
 {
     _weakTarget  = handler.Target != null ? new WeakReference(handler.Target) : null;
     _method      = handler.GetMethodInfo();
     _openHandler = OpenHandlerCache.GetOrAdd(_method, CreateOpenHandler);
 }
예제 #18
0
 public StrongHandler(object target, OpenEventHandler openHandler)
 {
     _target      = target;
     _openHandler = openHandler;
 }
예제 #19
0
        internal void Open()
        {
            OpenEventHandler oDelegate = new OpenEventHandler(this.OpenDelegate);

            oDelegate.Invoke();
        }