Excel.Application.SelectionChange срабатывает только один раз - PullRequest
1 голос
/ 23 мая 2011

Я получаю только уведомление о первом событии, и после этого ничего не происходит. Есть идеи?
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 Ответ

7 голосов
/ 23 мая 2011

Из-за того, как обработчики событий отслеживаются с помощью COM Interop, сборщик мусора может очистить RCW, что мешает вам получать события.

Убедитесь, что вы сохраняете ссылку на объект, имеющий обработчик событияНапример, вместо записи:

Application.CurrentWorkbook.SelectionChanged += ....

запись

class ThisAddin
{
    WorkBook _workbook;

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