Quante volte abbiamo implementato il metodo di invio dell'evento in questo modo
protected void OnMyEvent(MyEventArg e) {
if(MyEvent != null)
MyEvent(this, e);
}
Sembra giusto vero? Ma che cosa succede se due thread fanno la stessa chiamata ed in un certo momento (vogliamo mettere alla prova la legge di Murphy?...sicuramente succede durante la demo al cliente!) uno dei due thread de-sottoscrive all'evento (MyEvent diventa null) proprio quando l'altro thread ha gia' verificato che MyEvent non sia null? Bang, NullReferenceException!
Ecco la soluzione al problema:
protected void OnMyEvent(MyEventArg e) {
MyEventHandler temp = MyEvent;
if(temp != null)
temp(this, e);
}
semplice no?