/// <summary> /// Method invoked when (instead of) a new handler is removed from the target event. /// </summary> /// <param name="args">Context information.</param> public override void OnRemoveHandler(EventInterceptionArgs args) { // Remove the handler from our own list. if (RemoveHandler(args.Handler)) { args.RemoveHandler(null); } // Remove the handler from the client. DelegateReferenceKeeper.RemoveReference(args.Handler); }
/// <summary> /// Method invoked when (instead of) a new handler is added to the target event. /// </summary> /// <param name="args">Context information.</param> public override void OnAddHandler(EventInterceptionArgs args) { // Add the handler to our own list. if (AddHandler(args.Handler)) { args.AddHandler(null); } // Register the handler to the client to prevent garbage collection of the handler. DelegateReferenceKeeper.AddReference(args.Handler); }
/// <summary> /// Method invoked when (instead of) a new handler is removed from the target event. /// </summary> /// <param name="args">Context information.</param> public override void OnRemoveHandler(EventInterceptionArgs args) { // Remove the handler from our own list. if (RemoveHandler(args.Handler)) { // If this is the last handler, remove the fake handler to ourselves from the target event. args.RemoveHandler(null); } // Remove the handler from the client. DelegateReferenceKeeper.RemoveReference(args.Handler); }
/// <summary> /// Method invoked when (instead of) a new handler is added to the target event. /// </summary> /// <param name="args">Context information.</param> public override void OnAddHandler(EventInterceptionArgs args) { // Add the handler to our own list. if (AddHandler(args.Handler)) { // If it is the first handler we are adding, add a fake handler to ourselves to the target event. // Whichever handler will add here will be passed to OnInvokeHandler, so it is safe and convenient to pass null. args.AddHandler(null); } // Register the handler to the client to prevent garbage collection of the handler. DelegateReferenceKeeper.AddReference(args.Handler); }