Bạn có thể sử dụng bộ thiết lập thuộc tính để nâng cao sự kiện bất cứ khi nào giá trị của trường thay đổi.
Bạn có thể có đại biểu EventHandler của riêng mình hoặc bạn có thể sử dụng đại biểu System.EventHandler nổi tiếng.
Thông thường có một mẫu cho điều này:
- Xác định sự kiện công khai với đại biểu trình xử lý sự kiện (có đối số kiểu EventArgs).
- Xác định một phương thức ảo được bảo vệ có tên là OnXXXXX (ví dụ: OnMyPropertyValueChanged). Trong phương thức này, bạn nên kiểm tra xem ủy quyền của trình xử lý sự kiện có rỗng không và nếu không, bạn có thể gọi nó (có nghĩa là có một hoặc nhiều phương thức được đính kèm với ủy quyền sự kiện).
- Gọi phương thức được bảo vệ này bất cứ khi nào bạn muốn thông báo cho người đăng ký rằng có điều gì đó đã thay đổi.
Đây là một ví dụ
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();
}
}
Ưu điểm của phương pháp này là bạn cho phép bất kỳ lớp nào khác muốn kế thừa từ lớp của bạn thay đổi hành vi nếu cần.
Nếu bạn muốn bắt một sự kiện trong một luồng khác mà nó đang được đưa lên, bạn phải cẩn thận không thay đổi trạng thái của các đối tượng được xác định trong một luồng khác, điều này sẽ gây ra một ngoại lệ luồng chéo. Để tránh điều này, bạn có thể sử dụng phương thức Gọi trên đối tượng mà bạn muốn thay đổi trạng thái của nó để đảm bảo rằng thay đổi đang diễn ra trong cùng một chuỗi mà sự kiện đã được nêu ra hoặc trong trường hợp bạn đang xử lý Biểu mẫu Windows, bạn có thể sử dụng BackgourndWorker để thực hiện mọi việc theo một chuỗi song song một cách dễ dàng và dễ dàng.