Мой ответ - скорее комментарий для Томаса Левеска, но я пока не могу комментировать, так что здесь ничего не говорится. Я нахожу эту область C # немного уродливой, так как есть возможность ввести условия гонки - то есть могут участвовать разные потоки, и вы можете ввести оператор if
с CheckedChanged != null
if (CheckedChanged == null)
{
CheckedChanged += (s, e) =>
{
// code;
}
}
Вы должны либо заблокировать этот код, но во многих случаях вы обнаружите, что пишете такой код
//Invoke SomeEvent if there are any handlers attached to it.
if(SomeEvent != null) SomeEvent();
Но SomeEvent может быть обнулен в процессе, поэтому было бы безопаснее написать что-то вроде этого
SomeEVentHandler handler = SomeEvent;
if (handler != null) handler();
... просто для большей безопасности.