在C#中调用事件处理程序

Ton*_*ony 5 c# events

我一直在努力学习如何在C#中使用事件处理程序,但我无法弄清楚以下代码中的处理程序(this,e):

public event EventHandler ThresholdReached;

protected virtual void OnThresholdReached(EventArgs e)
{
    EventHandler handler = ThresholdReached;
    if (handler != null)
    {
        handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

它是否尝试使用事件(e)调用事件处理程序方法(this)?

Blu*_*ueM 8

它调用所有注册的事件侦听器 ThresholdReached事件。

handler != null检查确保至少有一个侦听器注册到该事件。

在 C# 6.0 及更高版本中,您可以使用Null Propagation

handler?.Invoke(this, e);
Run Code Online (Sandbox Code Playgroud)

handler(this, e)将调用每个注册的事件侦听器。事件侦听器在+=操作员的帮助下订阅,并在操作员的帮助下取消订阅-=该事件。

this是否可以让事件侦听器知道是谁引发了 ThresholdReached 事件。谁是事件的发送者。

e是事件参数,它也传递到侦听器方法中,该方法可以包含有关 ThresholdReached 事件的更多有用信息,例如达到了哪个阈值。