Đầu tiên xác định đại biểu, thứ hai xác định sự kiện. Cả hai có liên quan, nhưng chúng thường được sử dụng rất khác nhau.
Nói chung, nếu bạn đang sử dụng EventHandler
hoặc EventHandler<T>
, điều này sẽ gợi ý rằng bạn đang sử dụng sự kiện. Người gọi (để xử lý tiến trình) thường sẽ là đăng ký cho sự kiện (không chuyển qua người được ủy quyền) và bạn sẽ tăng sự kiện nếu bạn có người đăng ký.
Nếu bạn muốn sử dụng một phương pháp tiếp cận chức năng hơn, và vượt qua trong một đại biểu, tôi sẽ chọn một đại biểu thích hợp hơn để sử dụng. Trong trường hợp này, bạn không thực sự cung cấp bất kỳ thông tin nào trong số EventArgs
, vì vậy có lẽ chỉ cần sử dụng System.Action
sẽ phù hợp hơn.
Điều đó đang được nói, một cách tiếp cận sự kiện xuất hiện phù hợp hơn ở đây, từ mã nhỏ được hiển thị. Để biết chi tiết về cách sử dụng các sự kiện, hãy xem Events trong Hướng dẫn lập trình C#.
Mã của bạn, sử dụng các sự kiện, có khả năng sẽ giống như thế:
// This might make more sense as a delegate with progress information - ie: percent done?
public event EventHandler ProgressChanged;
public void Download(string url)
{
// ... No delegate here...
Khi bạn gọi tiến bộ của bạn, bạn muốn viết:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
Người dùng này sẽ viết những dòng này như sau:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
Nguồn
2013-02-27 18:21:46
Tôi đoán tôi không thực sự cần sự kiện có thật, bởi vì tôi sẽ chỉ có 1 thuê bao và tôi cần phải vượt qua các đại biểu xung quanh. Cảm ơn vì sự trả lời. –