public override void Dismiss()
        {
            if (!_isDismissed)
            {
                // Stop listening to the caret movement event

                if (_trackCaret)
                {
                    base.textView.Caret.PositionChanged -= new EventHandler <CaretPositionChangedEventArgs>(OnCaretPositionChanged);
                }

                _isDismissed = true;

                // Fire the "Dismissed" event.  This will signal consumers (namely, the session stack) to release pointers to this
                // session and let us die a peaceful death of garbage collection

                base.RaiseDismissed();

                // Now that we're dismissed, there's no reason to hang-on to the rest of this stuff.
                _componentContext   = null;
                _activeSignatures   = null;
                _readOnlySignatures = null;
                _selectedSignature  = null;

                base.Dismiss();
            }
        }
        public SignatureHelpSession(SignatureHelpBroker componentContext,
                                    ITextView textView,
                                    ITrackingPoint triggerPoint,
                                    bool trackCaret)
            : base(textView, triggerPoint)
        {
            _componentContext = componentContext;

            // If we were asked to track the caret, go ahead and subscribe to the event that tracks its movement.

            _trackCaret = trackCaret;
            if (_trackCaret)
            {
                base.textView.Caret.PositionChanged += new EventHandler <CaretPositionChangedEventArgs>(OnCaretPositionChanged);
            }
        }