Что ж, он эффективно очистит список подписчиков, да (установив базовое поле делегата на null
) - так что в следующий раз, когда будет установлен ProcessProgress
, обработчики не будут вызываться. Это на самом деле не установка события на null
- это установка базового поля на null
. Просто компилятор C # создает как событие (пара методов подписки / отписки), так и поле (для хранения обработчиков) с помощью одного объявления.
Вы можете найти мою статью о событиях и делегатах полезной.
Обратите внимание, что ваш код повышения событий в настоящее время не является поточно-ориентированным. Я не знаю, должно ли это быть или нет, но вы можете рассмотреть , используя:
set
{
_processProgress = value;
var handlers = ProcessProgressChanged;
if (handlers != null)
{
handlers(value);
}
}
Таким образом, вы не получите NullReferenceException
, если последний обработчик отписан после проверки недействительности, но до вызова.