DTE2事件不会发生

时间:2011-03-23 12:21:16

标签: c# visual-studio-2010 events visual-studio-addins vs-extensibility

在尝试开发我的第一个VS Addin时,我遇到了解决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 [...]
  }
}

2 个答案:

答案 0 :(得分:22)

您需要保存DocumentEvents类。 我认为它们会被废弃或者被垃圾收集起来。

就我而言。

private SolutionEvents solutionEvents;

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    Globals.DTE = (DTE2)application;
    Globals.Addin = (AddIn)addInInst;

    solutionEvents = Globals.DTE.Events.SolutionEvents;
    solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(SolutionEvents_Opened);
    solutionEvents.BeforeClosing += new _dispSolutionEvents_BeforeClosingEventHandler(SolutionEvents_BeforeClosing);
}

答案 1 :(得分:0)

我找到了解决这个问题的不同方法。

在进行我的活动订阅之前,我正在装箱并拆箱我的DTE对象。这最终证明了我的罪魁祸首。虽然这不是你的问题,但它可以帮助其他有类似问题的人;并且很高兴知道你不会犯同样的错误我花了很长时间才能解决。

见这里:http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004