检测何时关闭Visual Studio文档窗口

本文关键字:文档 窗口 Studio Visual 何时关 检测 | 更新日期: 2023-09-27 18:18:38

我已经构建了一个vpackage,从一个IVsInvisibleEditor投影文本。此IVsInvisibledEditor对应于用户在Visual Studio中打开并存在于文档窗口中的文件。

当用户关闭这个文档窗口时,它从底层的ITextBuffer中删除了一些属性。特别是它从源ITextBuffer中移除ITextDocument属性。

我想防止这种情况,因为用户可能正在使用我的扩展来继续编辑文档。当主文档编辑器关闭时,删除这些属性可以防止在自定义编辑器中识别击键。

如何检测Visual Studio何时关闭文档窗口?我已经研究了EnvDTE类,并注意到DocumentEvents类,但它被标记为Microsoft-internal。

是否有一个公共API,我可以检测文档窗口何时关闭?

检测何时关闭Visual Studio文档窗口

一个知道文档窗口何时关闭的有效方法是使用EnvDTE WindowEvents

WindowEvents _windowEvents;
// EnvDTE.Window _editorWindow=null;
_windowEvents = _vsObject.Events.get_WindowEvents(_editorWindow);
_windowEvents.WindowClosing += OnWindowClosing;
void OnWindowClosing(Window Window)
{
    /// your stuff here
}

另一个选项是通过ivswindowframeotify ..IVsWindowFrameNotify3接口

如果你有一个对文档IVsWindowFrame的有效引用,你可以使用Advise方法来接收所有与帧相关的事件。

_iVsWindowFrame.Advise(hostWindowFrameNotify, out hostWindowFrameNotify_cookie);

记住调用IVsWindowFrame。取消建议清理钩子