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 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; }
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; } }
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; } }
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; } }
/// <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); }
/// <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); }
public WeakPropertyChangeHandler(PropertyChangedEventHandler eventHandler, UnregisterDelegate <PropertyChangedEventHandler> unregister) : base(eventHandler, unregister) { }
public WeakEventHandler(EventHandler <E> eventHandler, UnregisterDelegate <EventHandler <E> > unregister) : base(eventHandler, unregister) { }