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

时间:2014-08-19 17:44:08

标签: c# visual-studio visual-studio-2013 envdte vspackage

我构建了一个VSPackage,用于投射IVsInvisibleEditor的文本。此IVsInvisibledEditor对应于用户在Visual Studio中打开并存在于Document Window内的文件。

当用户关闭此文档窗口时,它会从基础ITextBuffer中删除许多属性。特别是它会从源ITextDocument中删除ITextBuffer属性。

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

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

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

1 个答案:

答案 0 :(得分:2)

了解文档窗口何时关闭的一种有效方法是使用EnvDTE WindowEvents

WindowEvents _windowEvents;

// EnvDTE.Window _editorWindow=null;

_windowEvents = _vsObject.Events.get_WindowEvents(_editorWindow);
_windowEvents.WindowClosing += OnWindowClosing;

void OnWindowClosing(Window Window)
{
    /// your stuff here
}

另一种选择是通过IVsWindowFrameNotify..IVsWindowFrameNotify3接口

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

_iVsWindowFrame.Advise(hostWindowFrameNotify, out hostWindowFrameNotify_cookie);

请记住调用IVsWindowFrame.Unadvise清理钩子。