2011-05-23 117 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 += .... 
    } 
}