我创建一个Visual Studio扩展,我想在用户选择项更改或当前项目选择更改时收听。
我试着听 - SelectionEvents中的OnChange:
var dte = ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE.DTE)) as DTE2;
var dteEvents = dte.Events as Events2;
var selectionEvents = dteEvents.SelectionEvents;
selectionEvents.OnChange += SelectionEventsOnOnChange;
但是OnChange事件并没有发生。
答案 0 :(得分:0)
我发现了问题
简而言之:DTE事件是COM对象,当您在本地函数中处理此类对象的事件时,我们将GC删除参考。
解决方案:保存事件对象的私有成员。
private DTE2 _dte2;
private Events2 _dteEvents;
private SelectionEvents _selectionEvents;
private void OnLoaded()
{
_dte2 = ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE.DTE)) as DTE2;
_dteEvents = _dte2.Events as Events2;
_selectionEvents = _dteEvents.SelectionEvents;
_selectionEvents.OnChange += SelectionEventsOnOnChange;
}