Beispiel #1
0
 private void RemoveEvent(EventSinkMatchDelegate match)
 {
     lock (this) {
         SinkItem prevNode = null;
         SinkItem node     = _sinkHead;
         while (node != null)
         {
             if (match(node.UnkSink))
             {
                 _connectionPoint.Unadvise(node.Cookie);
                 if (prevNode == null)
                 {
                     _sinkHead = node.Next;
                     if (_sinkHead == null)
                     {
                         Marshal.ReleaseComObject(_connectionPoint);
                         _connectionPoint = null;
                     }
                 }
                 else
                 {
                     prevNode.Next = node.Next;
                 }
                 break;
             }
             prevNode = node;
             node     = node.Next;
         }
     }
 }
 private void RemoveEvent(EventSinkMatchDelegate match) {
     lock (this) {
         SinkItem prevNode = null;
         SinkItem node = _sinkHead;
         while (node != null) {
             if (match(node.UnkSink)) {
                 _connectionPoint.Unadvise(node.Cookie);
                 if (prevNode == null) {
                     _sinkHead = node.Next;
                     if (_sinkHead == null) {
                         Marshal.ReleaseComObject(_connectionPoint);
                         _connectionPoint = null;
                     }
                 } else {
                     prevNode.Next = node.Next;
                 }
                 break;
             }
             prevNode = node;
             node = node.Next;
         }
     }
 }