在VisualStudio中使用Windows桌面搜索
2007-03-15 21:46:43 来源:WEB开发网您还希望确保当编辑器中存在用户类型代码时,即使具有受限的查询结果,也不会因查询执行而导致延迟。幸运的是,Visual Studio 可扩展性恰好为此提供了编辑器事件。可通过 Events 接口访问这些事件。图 6 显示了如何进行设置。
基本思路是,如果用户正在输入代码、滚动代码或从一个窗口移至另一窗口,则延迟查询。您可以添加自己的委托,并将所有这些事件的全部委托设置为调用私有 EditorUpdateInProgress 方法,以延迟查询执行。
将其放在一起
当我着手创建该加载项时,目标是当用户选择 Visual Studio 编辑器中的某文本时仍然可以执行查询,而且我希望最初能找到一些 Visual Studio 可扩展性文本选定事件。虽然 TextSelection 可扩展性接口可返回当前选定的文本,但可扩展性并不提供文本选定更改事件。这是一个令人遗憾的退步。唯一的解决方案是轮询,但会再度产生 Visual Studio 响应性问题。轮询本质上是一种代价高昂的操作,因为您会在不必要的时候结束轮询。因此需要建立仔细的安全措施,以防止过度轮询。
一种方法是为您的用户控件添加计时器,并设置为每两秒滴答一次。也可以为“选项”对话框页面添加几个较慢的计时器刷新设置。计时器的 Tick 事件处理程序仅调用私有 ExecuteQuery 方法,设置查询和初始化次级工作线程处理就在此进行,如图 7 所示。为强调该方法的目的,一个很妙的主意是,将其命名为与 Windows Desktop Search SDK 的方法名称 (SearchDesktopClass.ExecuteQuery) 相匹配的名称。
当 ExecuteQuery 运行时,首先进行的操作就是将私有处理字段设置为“true”,并禁用轮询计时器。然后检索 Visual Studio 活动文档,并检索其带有 Text 属性的 TextSelection(如果有)。该属性会返回编辑器中当前选定的文本。
Tags:VisualStudio 使用 Windows
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接