คุณสามารถใช้ตัวตั้งค่าคุณสมบัติเพื่อเพิ่มเหตุการณ์เมื่อใดก็ตามที่ค่าของเขตข้อมูลกำลังจะเปลี่ยนไป
คุณสามารถมีผู้รับมอบสิทธิ์ EventHandler ของคุณเองหรือคุณสามารถใช้ตัวแทน System.EventHandler ที่มีชื่อเสียง
โดยปกติจะมีรูปแบบสำหรับสิ่งนี้:
- กำหนดกิจกรรมสาธารณะด้วยผู้แทนตัวจัดการเหตุการณ์ (ที่มีอาร์กิวเมนต์ประเภท EventArgs)
- กำหนดวิธีการเสมือนที่ได้รับการป้องกันที่เรียกว่า OnXXXXX (OnMyPropertyValueChanged เป็นต้น) ในวิธีนี้คุณควรตรวจสอบว่าผู้รับมอบสิทธิ์ตัวจัดการเหตุการณ์เป็นโมฆะหรือไม่และหากไม่สามารถเรียกใช้งานได้ (หมายความว่ามีวิธีการอย่างน้อยหนึ่งวิธีที่แนบมากับการมอบหมายเหตุการณ์)
- เรียกวิธีการป้องกันนี้ทุกครั้งที่คุณต้องการแจ้งให้สมาชิกทราบว่ามีการเปลี่ยนแปลง
นี่คือตัวอย่าง
private int _age;
public event System.EventHandler AgeChanged;
protected virtual void OnAgeChanged()
{
if (AgeChanged != null) AgeChanged(this,EventArgs.Empty);
}
public int Age
{
get
{
return _age;
}
set
{
_age=value;
OnAgeChanged();
}
}
ข้อดีของวิธีนี้คือคุณปล่อยให้คลาสอื่น ๆ ที่ต้องการสืบทอดจากคลาสของคุณเปลี่ยนพฤติกรรมได้หากจำเป็น
หากคุณต้องการจับเหตุการณ์ในเธรดอื่นที่มีการเพิ่มขึ้นคุณต้องระวังอย่าเปลี่ยนสถานะของอ็อบเจ็กต์ที่กำหนดไว้ในเธรดอื่นซึ่งจะทำให้เกิดข้อยกเว้นของเธรดข้าม เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้เมธอด Invoke กับอ็อบเจ็กต์ที่คุณต้องการเปลี่ยนสถานะเพื่อให้แน่ใจว่าการเปลี่ยนแปลงเกิดขึ้นในเธรดเดียวกับที่เหตุการณ์ได้รับการยกขึ้นหรือในกรณีที่คุณกำลังจัดการกับฟอร์ม Windows ที่คุณ สามารถใช้ BackgourndWorker เพื่อทำสิ่งต่างๆในเธรดคู่ขนานได้ดีและง่ายดาย