c# - 如何知道一个事件有多少个事件处理程序?

标签 c# .net events delegates

如何知道一个事件有多少个事件处理程序?

我想要一种方法来执行以下代码:

// if (control.CheckedChanged.Handlers.Length == 0)
{
    control.CheckedChanged += (s, e) =>
    {
      // code;
    }
}

注意:这段代码在控制类之外。

提前致谢。

最佳答案

你不能,因为只有公开事件的类型才能访问实际的委托(delegate)。在控件中,您可以执行类似的操作:

if (MyEvent!= null)
{
    EventHandler[] handlers = (EventHandler[])MyEvent.GetInvocationList();
    foreach(EventHandler handler in handlers)
    {
        ...
    }
}

或者,对于你正在尝试做的事情:

if (CheckedChanged == null)
{
    CheckedChanged += (s, e) =>
    {
      // code;
    }
}

关于c# - 如何知道一个事件有多少个事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541453/

相关文章:

c# - 如何在 DotNetNuke 项目中应用 .skin 文件

c# - SQLite :memory: database usage with using/dispose

events - 如何在模板中使用动态参数调用 meteor 助手

c++ - WS_EX_LAYERED 窗口不接收鼠标事件

.net - ASP .Net 服务器控制事件顺序

c# - WPF 高频数据绑定(bind)

c# - 在 ASP.NET WebApi 中,为什么 RouteData 的值类型是 "object"而不是 "string"

c# - 无法加载文件或程序集 'Microsoft.ReportViewer.Common,版本 = 11.0.0.0

c# - ToList() 方法在哪里? (可查询)

.net - 更新数据库记录中的单个字段时的最佳实践