#pragma warning disable S125 // Sections of code should not be "commented out" // <event type> b = (<event type>)FindWeak(<source delegate>, (EventHandler< eventargsType >)value); #pragma warning restore S125 // Sections of code should not be "commented out" public ILEmitter GenerateFindWeakIl(MethodDefinition method, VariableDefinition weakEventHandler) { var rootEmitter = new EmptyEmitter(method, _moduleimporter); var handler = rootEmitter.LoadMethodFirstArg(); if (!_isGenericHandler) { handler = rootEmitter.DelegateConvert(handler, _closedGenericEventHandler); } var callFindWeak = rootEmitter.FindWeak(_closedGenericEventHandler, rootEmitter.LoadField(_eventDelegate), handler); if (!_isGenericHandler) { return rootEmitter.Store(weakEventHandler, rootEmitter.DelegateConvert(callFindWeak, _eventDelegate.FieldType)); } return rootEmitter.Store(weakEventHandler, callFindWeak); }
// Wrap the method parameter in a weak event handler and store in a variable. #pragma warning disable S125 // Sections of code should not be "commented out" // i.e. <event type> b = (EventHandler)MakeWeak((EventHandler< eventargsType >)value, new Action<(EventHandler< eventargsType >)>(this.<woven unsubscribe action>)); #pragma warning restore S125 // Sections of code should not be "commented out" public ILEmitter GenerateMakeWeakIl(MethodDefinition method, MethodDefinition unsubscribe, VariableDefinition weakEventHandler) { var rootEmitter = new EmptyEmitter(method, _moduleimporter); var unsubscribeAction = rootEmitter.NewObject(_moduleimporter.ActionOpenCtor.MakeDeclaringTypeClosedGeneric(_closedGenericEventHandler), rootEmitter.LoadMethod(unsubscribe)); ILEmitter genericHandler = rootEmitter.LoadMethodFirstArg(); if (!_isGenericHandler) { genericHandler = rootEmitter.DelegateConvert(genericHandler, _closedGenericEventHandler); } var genericWeakHandler = rootEmitter.MakeWeak(_closedGenericEventHandler, genericHandler, unsubscribeAction); if (!_isGenericHandler) { return rootEmitter.Store(weakEventHandler, rootEmitter.DelegateConvert(genericWeakHandler, _eventDelegate.FieldType)); } return rootEmitter.Store(weakEventHandler, genericWeakHandler); }