Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Visual Studio中阻止OpenFile插件_C#_Visual Studio 2008_Visual Studio Addins_Envdte - Fatal编程技术网

C# 如何在Visual Studio中阻止OpenFile插件

C# 如何在Visual Studio中阻止OpenFile插件,c#,visual-studio-2008,visual-studio-addins,envdte,C#,Visual Studio 2008,Visual Studio Addins,Envdte,我有一个Visual Studio 2008插件,当我按下某个热键时,它会打开一个特定的文件(根据热键的上下文不同),然后搜索该文件中的特定字符串(同样,取决于上下文)。大多数情况下,这项工作都是完美的,但有时如果它打开的文件太大,搜索就会失败 以下是一段代码片段: Window xmlWindow = Commands.Application.ItemOperations.OpenFile(objectFilename, EnvDTE.Constants.vsViewKindPrimary);

我有一个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.另一个不太重要的注意事项是,有没有一种方法可以这样搜索,而不让结果出现在“查找结果”窗格中(这会导致我的旧结果被此搜索清除,而此搜索仅用于将光标向下移动到文件的该部分)


>B/>P> < P>如果OpenFILE异步运行,我建议您考虑更改逻辑,以依赖不同的事件,一个依赖于正在激活的文档。

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

//确保这些是类变量,否则它们可能会得到错误的GC,并中断COM交互 私有WindowEvents _winEvents=null; 私有DTE2_应用对象

在连接中:

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

_winEvents.WindowActivated += new _dispWindowEvents_WindowActivatedEventHandler(WindowActivated);
然后,在激活的窗口中添加一些代码:

void WindowActivated(Window GotFocus, Window LostFocus)
        {
            Document gotFocusDoc = GotFocus.Document;
            if (gotFocusDoc != null)
            {
                string fileExt = Path.GetExtension(gotFocusDoc.Name);
在那里,您将监视要扫描的文件(您可能需要保留一个列表,等等)


对于第二个问题,您可以按照我上面建议的方式访问文档后,自己扫描文档

我认为DTE.ItemOperations.OpenFile()方法是同步的。尝试为VS2008使用以下代码段

using EnvDTE;

Window win = _applicationObject.ItemOperations.OpenFile(@"path-to-xml-file", Constants.vsViewKindPrimary);
TextDocument doc = win.Document.Object("TextDocument") as TextDocument;
if (doc != null)
{
    EditPoint searchStart = doc.StartPoint.CreateEditPoint();
    EditPoint endOfFoundText = null;
    TextRanges ranges = null;

    bool result = searchStart.FindPattern("Text-to-search", (int)vsFindOptions.vsFindOptionsNone, ref endOfFoundText, ref ranges);
    if (result)
    {
        // Result is bounded by searchStart and endOfFoundText points.
        System.Windows.Forms.MessageBox.Show("BINGO! Found at " + searchStart.Line.ToString());
    }
}

如果您在捕获打开的窗口时遇到问题,我建议检查我的扩展的源代码:有一个WindowWatcher类,它跟踪文本视图的创建

当你说“搜索失败”时。。。这意味着它不会返回预期的结果,或者会出现错误消息?它不会返回预期的结果,因为搜索实际上是在当前打开的选项卡上执行的,而不是在它试图打开的选项卡上执行的。