2010-11-18 70 views
2

NET大師......你會如何將這個非常塊轉換成VB?C#和VB.NET之間的事件處理差異

this.timer = new System.Timers.Timer(100); 
this.timer.Elapsed+=new System.Timers.ElapsedEventHandler(ManageThreads); 
this.timer.Start(); 

當我使用在線轉換器(Telerik的),中間線轉換是這樣的:

Me.timer.Elapsed += New System.Timers.ElapsedEventHandler(ManageThreads) 

有2個錯誤: 1「公共eventElapsed是一個事件,不能直接調用。使用的RaiseEvent 2-代表需要Adess表情。難道我只是添加?

任何線索熱烈歡迎「地址」。

+3

蹩腳的轉換器,這是非常基本的。 – 2010-11-18 21:39:12

回答

5

動態移除事件處理程序添加事件處理程序的語法是非常不同的在C#和VB.NET之間,正如你發現Telerik不能很好地處理這種差異。

C#添加處理程序的語法:

<object>.<event> += <event_handler_function> 

VB添加處理程序的語法:

​​

有可能會遇到與VB事件處理另一個陷阱:你的對象添加一個事件處理程序必須在類作用域中聲明。例如。您不能將處理程序添加到本地創建的對象(在方法中),並將其返回或添加到集合中。所以當你需要動態地做事時,你基本上有一個類級別的temp變量。

祝你好運。

+0

爲了讓VB.NET自動將事件連接到使用'Handles'關鍵字的事件,必須使用'WithEvents'關鍵字將該事件聲明爲類作用域作爲自動事件屬性,但是我相當確信限制不會不適用於手動AddHandler/RemoveHandler代碼;我錯了嗎? – supercat 2013-10-01 21:02:11

+0

您的最後一段不正確。如果您手動連接事件,則只有在聲明對象「WithEvents」時纔有此限制,您可以在自己喜歡的位置聲明它 – 2016-08-10 09:47:39