जब भी किसी फ़ील्ड का मान बदलने जा रहा हो, तो किसी ईवेंट को बढ़ाने के लिए आप प्रॉपर्टी सेटर का उपयोग कर सकते हैं।
आपके पास अपना स्वयं का EventHandler प्रतिनिधि हो सकता है या आप प्रसिद्ध System.EventHandler प्रतिनिधि का उपयोग कर सकते हैं।
आमतौर पर इसके लिए एक पैटर्न होता है:
- किसी ईवेंट हैंडलर डेलीगेट के साथ सार्वजनिक कार्यक्रम को परिभाषित करें (जिसमें EventArgs का एक तर्क हो)।
- OnXXXXX नामक एक संरक्षित आभासी विधि को परिभाषित करें (उदाहरण के लिए OnMyPropertyValueChanged)। इस विधि में आपको यह जांचना चाहिए कि क्या ईवेंट हैंडलर डेलीगेट अशक्त है और यदि नहीं तो आप इसे कॉल कर सकते हैं (इसका मतलब है कि ईवेंट डेलिगेशन से जुड़े एक या अधिक तरीके हैं)।
- जब भी आप ग्राहकों को सूचित करना चाहते हैं कि कुछ बदल गया है, तो इस संरक्षित विधि को कॉल करें।
यहाँ एक उदाहरण है
private int _age;
//#1
public event System.EventHandler AgeChanged;
//#2
protected virtual void OnAgeChanged()
{
if (AgeChanged != null) AgeChanged(this,EventArgs.Empty);
}
public int Age
{
get
{
return _age;
}
set
{
//#3
_age=value;
OnAgeChanged();
}
}
इस दृष्टिकोण का लाभ यह है कि यदि आवश्यक हो तो व्यवहार को बदलने के लिए आप किसी अन्य वर्ग को अपनी कक्षा से विरासत में आने देना चाहते हैं।
यदि आप किसी भिन्न थ्रेड में किसी घटना को पकड़ना चाहते हैं, जिसे आप उठा रहे हैं, तो आपको सावधान रहना चाहिए कि उन वस्तुओं की स्थिति को बदलने के लिए नहीं जो किसी अन्य थ्रेड में परिभाषित हैं जो क्रॉस थ्रेड अपवाद को फेंकने का कारण होगा। इससे बचने के लिए आप या तो उस ऑब्जेक्ट पर एक इनवोक विधि का उपयोग कर सकते हैं, जिसे आप यह सुनिश्चित करने के लिए उसके राज्य को बदलना चाहते हैं कि यह परिवर्तन उसी थ्रेड में हो रहा है जिसमें ईवेंट को उठाया गया है या इस मामले में कि आप एक विंडोज फॉर्म के साथ काम कर रहे हैं। एक समानांतर धागे में चीजों को अच्छा और आसान करने के लिए BackgourndWorker का उपयोग कर सकते हैं।