2016-02-16 45 views
1

我試圖找到一種方法來確定定時器已過期事件的訂戶數量。從我的搜索,似乎我應該使用GetInvocationList()。然而,當我嘗試:獲取Timer.Elapsed事件的訂閱者列表

Private _schedulingTimer As Timers.Timer 

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

我得到以下錯誤:

'Public Event Elapsed As ElapsedEventHandler' is an event and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

難道我做錯了什麼?是否有另一種方式來獲得我所追求的?

回答

1

您可以在委託上調用GetInvocationList,但事件不是委託 - 事件只是暴露「訂閱」和「取消訂閱」操作的一致方式,以及實現這些操作的簡單方法(使用委託)。

訪問事件的註冊處理程序根本不是事件抽象的一部分。它們的存儲方式正是實現細節 - 就像屬性的值可以如何存儲在字段中一樣,或者可以按需(例如從多個字段)進行計算。

在暴露事件的類中,通常可以訪問調用列表(因爲您可以確定事件如何實現),但它不是「從外部」可用的信息。