События DTE2 не запускаются
Пытаясь разработать свой первый 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 ответа
Вам нужно сохранить класс 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);
}
Я нашел другое решение этой проблемы.
Я занимался боксом и распаковыванием своего объекта DTE перед подпиской на события. Это в конечном итоге оказалось виновником для меня. Хотя это не ваша проблема, она может помочь другим, у кого есть подобные проблемы; и это полезно знать, чтобы вы не делали тех ошибок, которые я совершил, и на их устранение ушло очень много времени.
Смотрите здесь: http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004