public static ComEventsMethod?Remove(ComEventsMethod methods, ComEventsMethod method) { Debug.Assert(methods != null, "removing method from empty methods collection"); Debug.Assert(method != null, "specify method is null"); if (methods == method) { return(methods._next); } else { ComEventsMethod?current = methods; while (current != null && current._next != method) { current = current._next; } if (current != null) { current._next = method._next; } return(methods); } }
/// <summary> /// Adds a delegate to the invocation list of events originating from the COM object. /// </summary> /// <param name="rcw">COM object firing the events the caller would like to respond to</param> /// <param name="iid">identifier of the source interface used by COM object to fire events</param> /// <param name="dispid">dispatch identifier of the method on the source interface</param> /// <param name="d">delegate to invoke when specified COM event is fired</param> public static void Combine(object rcw, Guid iid, int dispid, Delegate d) { lock (rcw) { ComEventsInfo eventsInfo = ComEventsInfo.FromObject(rcw); ComEventsSink sink = eventsInfo.FindSink(ref iid) ?? eventsInfo.AddSink(ref iid); ComEventsMethod method = sink.FindMethod(dispid) ?? sink.AddMethod(dispid); method.AddDelegate(d); } }
public static ComEventsMethod Add(ComEventsMethod?methods, ComEventsMethod method) { method._next = methods; return(method); }