Bir alanın değeri her değiştiğinde bir olay oluşturmak için bir özellik belirleyici kullanabilirsiniz.
Kendi EventHandler temsilcinize sahip olabilir veya ünlü System.EventHandler temsilcisini kullanabilirsiniz.
Genellikle bunun için bir kalıp vardır:
- Bir olay işleyici temsilcisiyle (EventArgs türünde bir bağımsız değişkene sahip olan) genel bir olay tanımlayın.
- OnXXXXX (örneğin OnMyPropertyValueChanged) adlı korumalı bir sanal yöntem tanımlayın. Bu yöntemde, olay işleyici temsilcisinin boş olup olmadığını kontrol etmelisiniz ve eğer değilse onu çağırabilirsiniz (bu, olay temsilcisine eklenmiş bir veya daha fazla yöntem olduğu anlamına gelir).
- Abonelere bir şeyin değiştiğini bildirmek istediğinizde bu korumalı yöntemi arayın.
İşte bir örnek
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();
}
}
Bu yaklaşımın avantajı, sınıfınızdan miras almak isteyen diğer sınıfların gerekirse davranışı değiştirmesine izin vermenizdir.
Oluşturulan farklı bir iş parçacığındaki bir olayı yakalamak istiyorsanız, başka bir iş parçacığında tanımlanan nesnelerin durumunu değiştirmemeye dikkat etmelisiniz, bu da çapraz iş parçacığı istisnasının atılmasına neden olur. Bundan kaçınmak için, değişikliğin olayın ortaya çıktığı aynı iş parçacığında gerçekleştiğinden emin olmak için durumunu değiştirmek istediğiniz nesnede bir Invoke yöntemi kullanabilirsiniz veya bir Windows Formuyla uğraşıyorsanız, bir BackgourndWorker kullanarak işleri paralel bir iş parçacığı içinde güzel ve kolay bir şekilde yapabilirsiniz.