如何:将事件处理程序方法连接到事件

若要使用在另一个类中定义的事件,必须定义和注册一个事件处理程序。 事件处理程序必须具有与为事件声明的委托相同的方法签名。 通过向事件添加事件处理程序可注册该处理程序。 向事件添加事件处理程序后,每当该类引发该事件时都会调用该方法。

有关阐释引发和处理事件的完整示例,请参见如何:引发和使用事件

为事件添加事件处理程序方法

  • 定义一个具有与事件委托相同的签名的事件处理程序方法。
Public Class WakeMeUp
    ' AlarmRang has the same signature as AlarmEventHandler.
    Public Sub AlarmRang(sender As Object, e As AlarmEventArgs)
        '...
    End Sub
    '...
End Class
public class WakeMeUp
{
    // AlarmRang has the same signature as AlarmEventHandler.
    public void AlarmRang(object sender, AlarmEventArgs e)
    {
        //...
    }
    //...
}
public ref class WakeMeUp
{
public:
    // AlarmRang has the same signature as AlarmEventHandler.
    void AlarmRang(Object^ sender, AlarmEventArgs^ e)
    {
        //...
    }
    //...
};
  1. 使用对该事件处理程序方法的一个引用创建委托的一个实例。 调用该委托实例时,该实例会接着调用该事件处理程序方法。
' Create an instance of WakeMeUp.
Dim w As New WakeMeUp()

' Instantiate the event delegate.
Dim alhandler As AlarmEventHandler = AddressOf w.AlarmRang
// Create an instance of WakeMeUp.
WakeMeUp w = new WakeMeUp();

// Instantiate the event delegate.
AlarmEventHandler alhandler = new AlarmEventHandler(w.AlarmRang);
// Create an instance of WakeMeUp.
WakeMeUp^ w = gcnew WakeMeUp();

// Instantiate the event delegate.
AlarmEventHandler^ alhandler = gcnew AlarmEventHandler(w, &WakeMeUp::AlarmRang);
  1. 将该委托实例添加到事件。 引发该事件时,就会调用该委托实例及其关联的事件处理程序方法。
' Instantiate the event source.
Dim clock As New AlarmClock()

' Add the delegate instance to the event.
AddHandler clock.Alarm, alhandler
// Instantiate the event source.
AlarmClock clock = new AlarmClock();

// Add the delegate instance to the event.
clock.Alarm += alhandler;
// Instantiate the event source.
AlarmClock^ clock = gcnew AlarmClock();

// Add the delegate instance to the event.
clock->Alarm += alhandler;

请参见

任务

如何:引发和使用事件

概念

使用事件

引发事件

事件和委托

其他资源

处理和引发事件