我在包內部做了一個擴展,並且調用以下代碼(當用戶按下工具欄中的按鈕時發生):DTE事件的訂閱似乎不起作用 - 事件不會被調用
DocumentEvents documentEvents = (DTE2)GetService(typeof(DTE));
_dte.Events.DebuggerEvents.OnEnterBreakMode += DebuggerEvents_OnEnterBreakMode;
_dte.Events.DebuggerEvents.OnEnterDesignMode += DebuggerEvents_OnEnterDesignMode;
_dte.Events.DebuggerEvents.OnContextChanged += DebuggerEvents_OnContextChanged;
_dte.Events.DocumentEvents.DocumentSaved += new _dispDocumentEvents_DocumentSavedEventHandler(DocumentEvents_DocumentSaved);
_dte.Events.DocumentEvents.DocumentOpened += new _dispDocumentEvents_DocumentOpenedEventHandler(DocumentEvents_DocumentOpened);
void DocumentEvents_DocumentOpened(Document Document)
{
}
void DocumentEvents_DocumentSaved(Document Document)
{
}
void DebuggerEvents_OnEnterBreakMode(dbgEventReason Reason, ref dbgExecutionAction ExecutionAction)
{
}
void DebuggerEvents_OnContextChanged(Process NewProcess, Program NewProgram, Thread NewThread, StackFrame NewStackFrame)
{
}
private void DebuggerEvents_OnEnterDesignMode(dbgEventReason reason)
{
}
第一個也是主要的問題是訂閱該事件不起作用。我已經試過:
- 打開新文件
- 從調試(因而理應觸發OnEnterDesignMode
- 拆卸保存文檔
這些都不似乎有任何影響,回調函數是從未打過電話
第二個問題是對事件行的訂閱工作USUALLY(訂閱本身,回調不起作用,如上所述)但經過一段時間運行訂閱行,e.g:
_dte.Events.DebuggerEvents.OnEnterBreakMode -= DebuggerEvents_OnEnterBreakMode;
導致異常:
Exception occured!
System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
at System.StubHelpers.StubHelpers.StubRegisterRCW(Object pThis, IntPtr pThread)
at System.Runtime.InteropServices.UCOMIConnectionPoint.Unadvise(Int32 dwCookie)
at EnvDTE._dispDebuggerEvents_EventProvider.remove_OnEnterDesignMode(_dispDebuggerEvents_OnEnterDesignModeEventHandler A_1)
任何想法將受到歡迎
謝謝! 維塔利
我有同樣的問題,這個解決它。謝謝! – 2011-05-04 16:44:58
您節省了2天的工作時間。在我的包裏面:'private static SolutionEvents solutionEvents; protected override void Initialize() { ApplicationObject = GetService(typeof(DTE))as DTE2; solutionEvents = ApplicationObject.Events.SolutionEvents;}' – LukTar 2017-10-19 12:14:31