C# 不带事件参数的EventHandler类型

C# 不带事件参数的EventHandler类型,c#,events,signals,C#,Events,Signals,当我们想要将数据传递给事件订阅者时,我们使用EventArgs(或CustomEventArgs)来实现这一点 .Net提供了一个内置类型EventHandler,它将内置的EventArgs类的实例用作参数 如果我需要通知订阅者某个操作已结束(例如搜索已结束),情况会如何?我甚至不想使用EventArgs,因为它不包含任何内容 是否有一种内置类型用于发送另一个类的信号,而不需要使用空的EventArgs?您可以做以下几件事: 将普通事件与EventHandler和基本EventArg类一起使用

当我们想要将数据传递给事件订阅者时,我们使用EventArgs(或CustomEventArgs)来实现这一点

.Net提供了一个内置类型EventHandler,它将内置的EventArgs类的实例用作参数

如果我需要通知订阅者某个操作已结束(例如搜索已结束),情况会如何?我甚至不想使用EventArgs,因为它不包含任何内容


是否有一种内置类型用于发送另一个类的信号,而不需要使用空的EventArgs?

您可以做以下几件事:

  • 将普通事件与EventHandler和基本EventArg类一起使用-确保它为空,但这会造成伤害吗
  • 制作您自己的委托,并将其与
    事件MyDelegateWithoutParams MyEvent一起使用
  • 将观察者模式改为使用IObservable
  • 让客户端传递一个动作,并调用此动作
  • 我希望其中一个选择是你喜欢的。对于这种情况,我使用1和4(如果只有一个“侦听器”,则通常使用4)


    PS:我想2不符合标准,所以这可能不是最好的主意;)

    如果你使用普通的
    代理
    当然你可以做你想做的事情,但是如果你使用
    事件
    我想最好的办法是坚持标准,始终有
    对象
    发送方和
    事件参数
    e


    如果您真的不知道从自己的代码触发这些事件时要传递什么,只需传递
    EventArgs.Empty
    作为第二个参数。

    我真的建议您在这里使用标准的EventHandler模式,只需传递
    EventArgs.Empty
    ;但是,您可以使用
    操作
    作为您真正想要的事件类型-这很不寻常。

    使用操作(以下答案抄袭自):

    宣布:

    public event Action EventWithoutParams; 
    public event Action<int> EventWithIntParam;
    

    这是对OP问题最直接的回答
    EventWithoutParams?.Invoke(); 
    EventWithIntParam?.Invoke(123);