2011-05-23 101 views
1

我只收到第一個事件通知,之後沒有任何反應。 任何想法?
UPD:我發現了一件奇怪的事情。我的事件處理程序代碼是這樣的:Excel.Application.SelectionChange只觸發一次

    var cell = range.Cells[1, 1]; 
        var rangeName = cell.Address[false, false, XlReferenceStyle.xlA1, Type.Missing, Type.Missing]; 

我以這種方式改變了它,將顯式類型轉換:

    var cell = (Range)range.Cells[1, 1]; 
        var rangeName = cell.Address[false, false, XlReferenceStyle.xlA1, Type.Missing, Type.Missing]; 

現在我的事件處理程序被調用好幾次,才把停止接聽電話。

回答

7

由於使用COM Interop跟蹤事件處理程序的方式,垃圾收集器可以清理RCW,從而阻止您接收事件。

請務必保持到了事件處理的對象的引用,例如,而不是書寫:

Application.CurrentWorkbook.SelectionChanged += .... 

class ThisAddin 
{ 
    WorkBook _workbook; 

    void AddinLoaded() 
    { 
     _workbook.SelectionChanged += .... 
    } 
}