When creating events most people do something like this
public event PropertyChangedEventHandler PropertyChanged;
internal void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
A much simpler approach is to instead do this
public event PropertyChangedEventHandler PropertyChanged = delegate { };
internal void RaisePropertyChanged(string propertyName)
{
// No need for null check because of empty delegate
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
which eleminates the need for the null check and eliminates the potential race conditions in multi-threaded code.