获取Timer.Elapsed事件的订阅者列表

时间:2016-02-16 16:09:13

标签: .net vb.net events

我正试图找到一种方法来确定计时器已过去事件的订户数量。从我的搜索,似乎我应该使用GetInvocationList()。但是,当我尝试:

Private _schedulingTimer As Timers.Timer

Private Sub SomeMethod()
        dim test = _schedulingTimer.Elapsed.GetInvocationList()
End Sub

我收到以下错误:

  

'公共事件经过ElapsedEventHandler'是一个事件,无法直接调用。使用'RaiseEvent'语句来引发事件。

我做错了吗?有没有其他方法来获得我想要的东西?

1 个答案:

答案 0 :(得分:1)

您可以在委托上调用GetInvocationList,但事件不是委托 - 事件只是暴露“订阅”和“取消订阅”操作的一致方式,以及实现这些操作的简单方法(使用代表)。

访问事件的注册处理程序根本不是事件抽象的一部分。它们究竟是如何存储的是一个实现细节 - 就像属性的值可以存储在一个字段中一样,或者它可以按需计算(例如来自多个字段)。

在暴露事件的类中,您通常可以访问调用列表(因为您可以确定事件的实现方式),但它不是“从外部”可用的信息。