Excel.Application.SelectionChange仅触发一次

use*_*528 1 excel vsto add-in ms-office

我只收到第一个事件通知,之后没有任何反应.有任何想法吗?
UPD:我发现了一件奇怪的事.我的事件处理程序代码如下所示:

                    var cell = range.Cells[1, 1];
                    var rangeName = cell.Address[false, false, XlReferenceStyle.xlA1, Type.Missing, Type.Missing];
Run Code Online (Sandbox Code Playgroud)

我用这种方式改了它,添加了显式类型转换:

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

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

Jak*_*van 7

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

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

Application.CurrentWorkbook.SelectionChanged += ....
Run Code Online (Sandbox Code Playgroud)

class ThisAddin
{
    WorkBook _workbook;

    void AddinLoaded()
    {
        _workbook.SelectionChanged += ....
    }
}
Run Code Online (Sandbox Code Playgroud)