gpt4 book ai didi

c# - 如何在 Visual Studio 加载项中阻止打开的文件

转载 作者:太空狗 更新时间:2023-10-30 00:17:13 26 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 插件,当我按下某个热键时,它会打开一个特定的文件(根据热键的上下文不同),然后在该文件中搜索特定的字符串(同样,依赖于上下文。)大多数有时这可以完美地工作,但有时如果它打开的文件太大,搜索将失败。

这是一个代码片段:

Window xmlWindow = Commands.Application.ItemOperations.OpenFile(objectFilename, EnvDTE.Constants.vsViewKindPrimary);
Find find = xmlWindow.Document.DTE.Find;
find.Action = vsFindAction.vsFindActionFind;
find.FindWhat = String.Format("Name=\"{0}\"", objectLocalName);
if (find.Execute() == vsFindResult.vsFindResultFound) {
MessageBox.Show("Found!");
}



1. 有没有办法让它一直工作(例如通过阻塞 OpenFile)?

2. 不太重要的一点是,有没有一种方法可以像这样搜索而不让结果出现在“查找结果” Pane 中(这会导致我的旧结果被此搜索清除,该搜索仅用于将光标向下移动到文件的那部分)?


最佳答案

如果 OpenFile 行为异步,我建议您考虑更改逻辑以依赖于不同的事件,该事件依赖于正在激活的文档。

例如,您是否尝试过使用快捷键触发 OpenFile,然后将搜索排队以便稍后由 VS 事件处理? (下面的代码取自 Visual Studio 2010 插件,但我相信事件是相同的。)

//确保这些是类变量,否则它们可能会错误地得到 GC 并破坏 COM 交互 私有(private)窗口事件 _winEvents = null; 私有(private) DTE2 _applicationObject;

在连接中:

_events = _applicationObject.Events;
_winEvents = _events.get_WindowEvents();

_winEvents.WindowActivated += new _dispWindowEvents_WindowActivatedEventHandler(WindowActivated);

然后,您将在 WindowActivated 中放入一些代码:

void WindowActivated(Window GotFocus, Window LostFocus)
{
Document gotFocusDoc = GotFocus.Document;
if (gotFocusDoc != null)
{
string fileExt = Path.GetExtension(gotFocusDoc.Name);

在那里,您可以查看要扫描的文件(您可能需要保留一个列表等)。

对于第二期,您可以按照我上面建议的方式获得访问权限后自己扫描文档。

关于c# - 如何在 Visual Studio 加载项中阻止打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com