我只收到第一个事件通知,之后没有任何反应。
任何想法?
UPD:我发现了一件奇怪的事。我的事件处理程序代码如下所示:
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];
现在我的事件处理程序被多次调用,然后才停止调用。
答案 0 :(得分:7)
由于使用COM Interop跟踪事件处理程序的方式,垃圾收集器可以清理阻止您接收事件的RCW。
确保您保留对具有事件处理程序的对象的引用,例如,而不是编写:
Application.CurrentWorkbook.SelectionChanged += ....
写
class ThisAddin
{
WorkBook _workbook;
void AddinLoaded()
{
_workbook.SelectionChanged += ....
}
}