События DTE2 не запускаются - PullRequest
10 голосов
/ 23 марта 2011

При попытке разработать свой первый 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 ]

22 голосов
/ 23 марта 2011

Вам необходимо сохранить класс 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);
}
0 голосов
/ 06 января 2013

Я нашел другое решение этой проблемы.

Я занимался упаковкой и распаковыванием своего объекта DTE, прежде чем подписываться на события. Это в конечном итоге оказалось виновником для меня. Хотя это не ваша проблема, она может помочь другим, у кого есть подобные проблемы; и это полезно знать, чтобы вы не делали тех ошибок, которые я совершил, и на их устранение ушло очень много времени.

Смотрите здесь: http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004

...