Puede usar un establecedor de propiedades para generar un evento siempre que cambie el valor de un campo.
Puede tener su propio delegado EventHandler o puede utilizar el famoso delegado System.EventHandler.
Por lo general, hay un patrón para esto:
- Defina un evento público con un delegado de controlador de eventos (que tenga un argumento de tipo EventArgs).
- Defina un método virtual protegido llamado OnXXXXX (OnMyPropertyValueChanged, por ejemplo). En este método, debe verificar si el delegado del controlador de eventos es nulo y, en caso contrario, puede llamarlo (significa que hay uno o más métodos adjuntos a la delegación de eventos).
- Llame a este método protegido siempre que desee notificar a los suscriptores que algo ha cambiado.
Aquí hay un ejemplo
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();
}
}
La ventaja de este enfoque es que permite que cualquier otra clase que desee heredar de su clase cambie el comportamiento si es necesario.
Si desea capturar un evento en un subproceso diferente que se está generando, debe tener cuidado de no cambiar el estado de los objetos que están definidos en otro subproceso, lo que provocará que se lance una excepción de subproceso cruzado. Para evitar esto, puede usar un método Invoke en el objeto cuyo estado desea cambiar para asegurarse de que el cambio está ocurriendo en el mismo hilo en el que se generó el evento o en caso de que esté tratando con un formulario de Windows. puede usar un BackgourndWorker para hacer cosas en un hilo paralelo agradable y fácil.