2014-03-30 41 views
0

這可能是一個愚蠢的問題,但我不能得到這個工作。EventHandler沒有被調用

使用第三方C#庫,我需要通過一個事件處理程序來獲取實時數據,它是這樣的東西:

Library.KEvents bnoEvent = new Library.KEvents(); 
envtsList.Add(bnoEvent); 
/* 
Some code to set bnoEvent up 
*/ 
bnoEvent.OnEvent += new Library._IKEventsEvents_OnEventEventHandler(bnoEvent_OnEvent); 

bnoEvent_OnEvent從未執行的函數。

演示代碼,我得到了(在VB中)看起來是這樣的:

If KEventsA Is Nothing Then 
    Set KEventsA = New Library.KEvents 
End If 
/* Setting KEventA up */ 

正被調用的方法是:

Private Sub KEvents_OnEvent(data As KType) 

這讓我發瘋!我找不到這個函數和KEventA對象之間的任何連接!它如何知道?

我知道在不知道這個庫實際工作的情況下調試相當困難,但是在聲明函數並將其添加爲新的eventHandler之前註冊事件時,我應該做什麼主要事情?

+2

它是古代VB6時代的代碼。該語言不需要特定的事件訂閱,只需提供正確名稱的子例程即可。你的C#看起來是正確的,當然古代代碼不會做你希望的東西。從作者或供應商處獲得幫助是您唯一真正的追求。 –

回答

1

可以使用Addhandler聲明或Handles子句的事件子。這就是VB設立代表的方式。

If KEventsA Is Nothing Then 
KEventsA = New Library.KEvents 
Addhandler KEventsA.OnEvent, AddressOf KEvents_OnEvent 
End If 

或者

'must use this for declarations for this way 
Private WithEvents KEventsA As New Library.KEvents 
'then the method 
Private Sub KEvents_OnEvent(data As KType) Handles KEventsA.OnEvent 

C#

Library.KEvents KEventsA = new Library.KEvents; 
KEventsA.OnEvent += new EventHandler(KEvents_OnEvent); 
+0

你是對的,VB代碼聲明:「Private WithEvents KEvents As Library.KEvents」。但它絕不會將KEvent_OnEvent連接到KEventA。我如何在C#中建立這種連接? –

+0

那麼你是說它不會讓你使用Handles子句? – OneFineDay

+0

還是我困惑,你需要在C#中的答案? – OneFineDay