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