2011-02-28 10 views
10

असल में, मैंने देखा है यह सब अक्सर करते थे:इसे कॉल करने से पहले किसी ईवेंट को हैंडलर क्यों असाइन करें?

public event MyEventHandler MyEvent; 

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

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

यह बस के रूप में आसानी से ऐसा तरह किया जा सकता है जब:

public event MyEventHandler MyEvent; 

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

तो, मैं कुछ याद आ रही है? क्या लोग कुछ हैंडलर को ईवेंट सौंपते हैं, फिर घटना के बजाए हैंडलर उठाते हैं? क्या यह सिर्फ "सर्वोत्तम अभ्यास" है?

उत्तर

10

एक स्थानीय चर के लिए काम सुनिश्चित करता है कि अगर घटना if और वास्तविक मंगलाचरण के बीच अपंजीकृत हो जाता है, मंगलाचरण सूची अशक्त नहीं होगा (के बाद से चर मूल मंगलाचरण सूची की एक प्रति होगा)।

यह आसानी से मल्टीथ्रेड कोड में हो सकता है, जहां एक नल की जांच और घटना को फायर करने के बीच इसे किसी अन्य थ्रेड द्वारा अनियंत्रित किया जा सकता है।

this SO प्रश्न और उत्तर देखें।

2

थ्रेड सुरक्षा।

क्या होता है जब आप जांचते हैं कि माईवेन्ट शून्य है या आप MyEvent को फायर करते हैं, तो दूसरा धागा घटना के साथ आता है और सदस्यता रद्द करता है?

संबंधित मुद्दे