/// <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 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); }