Нашел проблему.У меня был редактор таблиц данных, у которого свойство TablesList
было привязано к списку таблиц данных в объекте менеджера базы данных.В его аксессоре set
я проверил, существует ли еще таблица в списке и не закрыл ли редактор, и удалил привязку данных из менеджера базы данных.Итак, пока внутренности .NET проходили по объектам, привязанным к TablesList
, один из них удалился из списка.Но .NET не замечает этого изменения из-за способа написания цикла:
int numLinks = Bindings.Count;
for (int i = 0; i < numLinks; i++) {
if (Bindings[i].PushData()) {
success = false;
}
}
Я в основном удалял привязку изнутри вызова PushData()
.Мое решение состояло в том, чтобы прикрепить обработчик события к событию PropertyChanged
и проверить список таблиц там.Очевидно, что любой цикл, который используется в .NET для циклического перемещения по списку событий, позволяет удалить событие, находящееся в цикле.
Полагаю, мораль такова: никогда не удаляйте Binding
, который обновляет свойство из set
принадлежащий этому имуществу;но можно удалить обработчик события из самого обработчика события.Правильно?