Пример #1
0
        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);
            }
        }
Пример #2
0
        public ComEventsMethod AddMethod(int dispid)
        {
            ComEventsMethod method = new ComEventsMethod(dispid);

            _methods = ComEventsMethod.Add(_methods, method);
            return(method);
        }
Пример #3
0
        public void RemoveHandler(int dispid, object func)
        {
            ComEventsMethod sinkEntry = FindMethod(dispid);

            if (sinkEntry == null)
            {
                return;
            }

            // Remove the delegate from multicast delegate chain.
            // We will need to find the delegate that corresponds
            // to the func handler we want to remove. This will be
            // easy since we Target property of the delegate object
            // is a ComEventCallContext object.
            sinkEntry.RemoveDelegates(d => d.Target is SplatCallSite callContext && callContext._callable.Equals(func));

            // If the delegates chain is empty - we can remove
            // corresponding ComEvenSinkEntry
            if (sinkEntry.Empty)
            {
                RemoveMethod(sinkEntry);
            }

            if (_methods.Empty)
            {
                Dispose();
            }
        }
Пример #4
0
        public static ComEventsMethod Find(ComEventsMethod methods, int dispid)
        {
            while (methods != null && methods._dispid != dispid)
            {
                methods = methods._next;
            }

            return(methods);
        }
Пример #5
0
        public void AddHandler(int dispid, object func)
        {
            ComEventsMethod method = FindMethod(dispid);

            if (method == null)
            {
                method = AddMethod(dispid);
            }
            method.AddDelegate(new SplatCallSite(func).Invoke);
        }
Пример #6
0
 public static ComEventsMethod Add(ComEventsMethod methods, ComEventsMethod method)
 {
     method._next = methods;
     return(method);
 }
Пример #7
0
 public ComEventsMethod FindMethod(int dispid)
 {
     return(ComEventsMethod.Find(_methods, dispid));
 }
Пример #8
0
 public ComEventsMethod RemoveMethod(ComEventsMethod method)
 {
     _methods = ComEventsMethod.Remove(_methods, method);
     return(_methods);
 }