Excel.Application.SelectionChange仅触发一次

时间:2011-05-23 03:45:48

标签: excel vsto ms-office add-in

我只收到第一个事件通知,之后没有任何反应。 任何想法?
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];

现在我的事件处理程序被多次调用,然后才停止调用。

1 个答案:

答案 0 :(得分:7)

由于使用COM Interop跟踪事件处理程序的方式,垃圾收集器可以清理阻止您接收事件的RCW。

确保您保留对具有事件处理程序的对象的引用,例如,而不是编写:

Application.CurrentWorkbook.SelectionChanged += ....

class ThisAddin
{
    WorkBook _workbook;

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