9

在嘗試開發我的第一個VS Addin時,我在解決DTE2事件時遇到了問題。DTE2事件不會觸發

基本上,由於某種原因,DocumentOpened和LineChanged事件不會觸發。我錯過了什麼重要的部分?

namespace TestAddin { 
    public class Connect : IDTExtensibility2 { 
    private AddIn _addInInstance; 
    private DTE2 _applicationObject; 

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { 
     _applicationObject = (DTE2) application; 
     _addInInstance = (AddIn) addInInst; 

     _applicationObject.Events.DocumentEvents.DocumentOpened += InitializeFoldingOnDocument; 
     _applicationObject.Events.TextEditorEvents.LineChanged += UpdateFoldingOnDocument; 
    } 

    private void UpdateFoldingOnDocument(TextPoint startpoint, TextPoint endpoint, int hint) { 
     RegionFolding(_applicationObject.ActiveDocument); 
    } 

    private void InitializeFoldingOnDocument(Document document) { 
     RegionFolding(document); 
    } 

    private void RegionFolding(Document _document) { 
     // Do the folding [...] 
    } 

    // Other IDTExtensibility2 Members [...] 
    } 
} 

回答

20

您需要保存DocumentEvents類。 我認爲他們會被廢棄或收集其他垃圾。

在我的情況。

+0

就是這樣,謝謝! – fjdumont 2011-03-23 12:36:59

+1

作爲一名新手VSX開發者,這一款讓我非常滿意。如果任何人感興趣的話,請點擊這裏Microsoft KB問題文章:http://support.microsoft.com/kb/555430 – 2011-07-18 07:56:00

+0

我不知道你是怎麼想出來的,但這太棒了! – 2011-09-10 17:21:20

0

我發現了一個不同的解決方案來解決這個問題。

在做我的活動訂閱之前,我正在裝箱和拆箱我的DTE對象。這有力地證明了我的罪魁禍首。雖然這不是你的問題,但它可以幫助其他有類似問題的人;並且很高興知道,這樣你就不會犯同樣的錯誤,而這些錯誤需要花費很長時間才能解決。

請看這裏:http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004