2011-02-28 18 views
10

Temelde, bu tüm sık kullanılan gördüm: o aynı kolaylıkla şöyleNeden bir işleyiciyi arayamadan önce bir etkinliğe atayın?

public event MyEventHandler MyEvent; 

    private void SomeFunction() 
    { 
     MyEventHandler handler = this.MyEvent; 

     if (handler != null) 
     { 
      handler(this, new MyEventArgs()); 
     } 
    } 

yapılabilir Ne zaman: Yani

public event MyEventHandler MyEvent; 

    private void SomeFunction() 
    { 
     if (MyEvent != null) 
     { 
      MyEvent(this, new MyEventArgs()); 
     } 
    } 

, bir şey eksik? İnsanların etkinliği bir işleyiciye atamasının bir sebebi var mı, daha sonra olay yerine kendisinin işleyicisini mi yükseltiyorsunuz? Sadece "en iyi uygulama" mı?

cevap

10

yerel bir değişkene atama olay if ve gerçek çağırma arasındaki ruhsatlı olmayan alırsa (değişken özgün çağırma listesinin bir kopyasını olacağından), çağırma listesi boş olmayacağını garanti eder.

Bu işlem, çok iş parçacıklı kodlarda kolayca gerçekleşebilir; burada bir boş değeri denetleme ve olayı tetikleme arasında başka bir iş parçacığı tarafından kayıt dışı olabilir.

Bkz. this SO soru ve cevapları.

2

Güvenlik iş parçacığı.

MyEvent öğesinin boş olup olmadığını ve MyEvent öğesinin işlenip tetiklenmediğini kontrol ettiğinizde, başka bir iş parçacığı gelirse ve etkinlikten çıkmak isterse ne olur?

İlgili konular