如果您不需要將任何自定義參數傳遞給事件處理函數,則可以使用使用基本EventArgs的默認EventHandler委託。
聲明你要提供這樣的事件:
public event EventHandler EventReceived;
public event EventHandler ObjectReceived;
聲明每個事件來處理引發事件對你的保護方法。這實際上只是一種方便,無需每次都需要重複此操作。你可以這樣做內聯。
如果沒有附加的事件處理程序,則您的事件將爲空。該方法在觸發事件之前處理檢查。
protected void RaiseEventReceived(EventArgs e)
{
if (EventReceived != null)
EventReceived(this, e);
}
然後當您想要提升事件時調用該方法。該方法將處理檢查以查看是否有人正在收聽該事件。
public void SomeOtherMethod()
{
while (IsConnected)
{
switch (CurrentState)
{
case CurrentServerState.EventReceived:
RaiseEventReceived(EventArgs.Empty);
break;
case CurrentServerState.ObjectReceived:
RaiseObjectReceived(EventArgs.Empty);
break;
}
}
}
您可以聲明自己的類,以通過派生自EventArgs(如下所示)將自定義參數傳遞給事件處理程序。按照慣例,你的類應該被命名爲* something * EventArgs。
public class EventReceivedEventArgs : EventArgs
{
// Declare properties to hold additional event info here
}
那麼你就需要聲明一個自定義的委託,它需要新的事件參數的參數:
public delegate void EventReceivedEventHandler(object sender, EventReceivedEventArgs e);
更新您的事件聲明,而不是使用新的委託EventHandler類型:
public event EventReceivedEventHandler EventReceived;
最後,在引發事件時,您當然會想要創建自定義事件參數類的新實例並初始化您的自定義屬性。
客戶端可以使用正常語法將多個處理程序附加到您的事件,並且它們將始終在正確的線程上調用。