Você pode usar um configurador de propriedade para gerar um evento sempre que o valor de um campo for alterado.
Você pode ter seu próprio delegado EventHandler ou pode usar o famoso delegado System.EventHandler.
Normalmente, há um padrão para isso:
- Defina um evento público com um delegado de manipulador de eventos (que tem um argumento do tipo EventArgs).
- Defina um método virtual protegido chamado OnXXXXX (OnMyPropertyValueChanged por exemplo). Neste método, você deve verificar se o delegado do manipulador de eventos é nulo e, caso contrário, você pode chamá-lo (isso significa que há um ou mais métodos anexados à delegação de eventos).
- Chame esse método protegido sempre que quiser notificar os assinantes de que algo mudou.
Aqui está um exemplo
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();
}
}
A vantagem dessa abordagem é que você permite que qualquer outra classe que deseja herdar de sua classe altere o comportamento, se necessário.
Se você quiser capturar um evento em um thread diferente que está sendo gerado, deve ter cuidado para não alterar o estado dos objetos que são definidos em outro thread, o que fará com que uma exceção de thread cruzado seja lançada. Para evitar isso, você pode usar um método Invoke no objeto cujo estado deseja alterar para ter certeza de que a mudança está acontecendo no mesmo segmento em que o evento foi gerado ou no caso de estar lidando com um Windows Form, pode usar um BackgourndWorker para fazer coisas em um thread paralelo de forma fácil e agradável.