Как работают мои программы
У меня есть бэкэнд с несколькими объектами, у которых есть событие PropetyChanged.Когда какое-либо свойство изменяется, уведомление запускается.На внешней стороне у меня есть GUI, написанный на WPF, и несколько свойств привязаны непосредственно к виджетам WPF.
Чтобы адаптировать GUI, все вычисления выполняются в дополнительном потоке.
Итак, вобщее, классическое приложение WPF.
Ошибка
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name)); // (*)
}
Этот код отправляет уведомления, однако он генерирует исключение в (*), поскольку PropertyChanged имеет значение null (да, просто после проверка на ноль).
Вопрос
Я думаю, это из-за повторной привязки в WPF - в моем коде я меняю отправителя, поэтому WPF должен отменить регистрацию получателя и зарегистрировать его в новомотправитель.Исключение выдается редко (я получаю одно исключение каждые ~ 40000 проходов выполнений, каждое эквивалентно примерно одному изменению отправителя), но это происходит .
Сейчас - как правильно заблокировать PropertyChange, чтобы я мог проверять на нулевое значение И отправлять уведомление как атомарную операцию? Я не хочу делать это методом проб и ошибок, потому что я мог обнаруживать побочные эффекты при каждом 1-м выполнении.