如何:将事件处理程序方法连接到事件
若要使用在另一个类中定义的事件,必须定义和注册一个事件处理程序。 事件处理程序必须具有与为事件声明的委托相同的方法签名。 通过向事件添加事件处理程序可注册该处理程序。 向事件添加事件处理程序后,每当该类引发该事件时都会调用该方法。
有关阐释引发和处理事件的完整示例,请参见如何:引发和使用事件。
为事件添加事件处理程序方法
- 定义一个具有与事件委托相同的签名的事件处理程序方法。
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)
{
//...
}
//...
};
- 使用对该事件处理程序方法的一个引用创建委托的一个实例。 调用该委托实例时,该实例会接着调用该事件处理程序方法。
' 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);
- 将该委托实例添加到事件。 引发该事件时,就会调用该委托实例及其关联的事件处理程序方法。
' 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;