2010-10-02 20 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