필드 값이 변경 될 때마다 속성 설정기를 사용하여 이벤트를 발생시킬 수 있습니다.
고유 한 EventHandler 대리자를 가질 수도 있고 유명한 System.EventHandler 대리자를 사용할 수도 있습니다.
일반적으로 이에 대한 패턴이 있습니다.
- EventArgs 유형의 인수가있는 이벤트 처리기 대리자를 사용하여 공용 이벤트를 정의합니다.
- OnXXXXX (예 : OnMyPropertyValueChanged)라는 보호 된 가상 메서드를 정의합니다. 이 메서드에서 이벤트 처리기 대리자가 null인지, 그렇지 않은 경우이를 호출 할 수 있는지 확인해야합니다 (이벤트 위임에 연결된 메서드가 하나 이상 있음을 의미 함).
- 구독자에게 변경 사항을 알리고 싶을 때마다이 보호 된 메서드를 호출하십시오.
여기에 예가 있습니다.
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();
}
}
이 접근 방식의 장점은 클래스에서 상속하려는 다른 클래스가 필요한 경우 동작을 변경하도록 허용한다는 것입니다.
발생하는 다른 스레드에서 이벤트를 포착하려면 다른 스레드에서 정의 된 객체의 상태를 변경하지 않도록주의해야합니다. 이로 인해 교차 스레드 예외가 발생합니다. 이를 방지하려면 상태를 변경하려는 개체에서 Invoke 메서드를 사용하여 이벤트가 발생한 동일한 스레드에서 변경이 발생하는지 확인하거나 Windows Form을 처리하는 경우 BackgourndWorker를 사용하여 병렬 스레드에서 쉽고 편리하게 작업 할 수 있습니다.