2010-11-18 48 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