2010-10-02 25 views
0

我正在为VS2010编写一个扩展,它通过重新排列代码段并插入#regions来重新排序代码页。如何连接与VS2010的大纲模型相关的事件

我希望能够在完成我的文本操作后,在调用“Edit.CollapseToDefinitions”命令时进行编码。我可以通过在我的DTE2对象上调用ExecuteCommand来在Visual Studio模型中调用此命令。

但是,如果我在文档周围移动文档后立即调用该命令,VS没有时间更新其大纲记录。所以,我希望能够勾勒出在当前文本编辑器窗口上概述事件。有谁知道如何做到这一点?

回答

0

没有很好的方法来做到这一点。您可以侦听在IOutliningManager(通过[导入] IOutliningManagerService检索)上概述区域更改事件,但不能保证第一个事件将是语言服务重新引入其所有概述区域的事件。大多数语言都是在VS空闲循环中执行它,但仍然有一些延迟,这样它就不会中断慢速打字。

我会尝试的东西,如打转转:

  1. 完成文本编辑
  2. 呼叫崩溃定义
  3. 订阅IOutliningManager.RegionsChanged
  4. 如果下一个事件引发的,也就是说,接下来5秒钟,再次调用崩溃定义。
+0

谢谢诺亚。这听起来很凌乱,不是吗? – 2010-10-03 11:00:04

+0

这是语言使用的异步模型的缺点。我希望在未来版本的VS中引入一些东西,让消费者以这种方式请求标签(包括概述区域),这意味着“继续并阻止,直到您准备好”。 – 2010-10-04 01:48:46