订阅VB.NET中的事件

订阅VB.NET中的事件

问题描述:

我试图将一些C#代码转换为VB.NET。订阅VB.NET中的事件

,我有以下的C#(工作)

m_switchImageTimer = new DispatcherTimer(); 
m_switchImageTimer.Interval = Interval; 
m_switchImageTimer.Tick += (s, e) => LoadNextImage(); 

我挣扎,成功转换的关键行是:

m_switchImageTimer.Tick += (s, e) => LoadNextImage(); 

我曾尝试是:

m_switchImageTimer.Tick += Function(s, e) LoadNextImage() 
m_switchImageTimer.Tick += New EventHandler(AddressOf LoadNextImage) 

这些都不起作用。

第一次尝试产生两个差错,第一VS2010亮点m_switchImageTimer.Tick下:

Error 1 'Public Event Tick(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event

和LoadNextImage(下突出显示)产生以下错误:

Error 3 Expression does not produce a value.

第二次尝试产生同样的错误:

Error 1 'Public Event Tick(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

如何将C #代码到VB.NET?

感谢 本

订阅在VB.NET事件要求要么AddHandler的或Handles关键字。你也会遇到lambda问题,Function关键字需要一个返回值的表达式。在VS2010,你可以这样写:

AddHandler m_switchImageTimer.Tick, Sub(s, e) LoadNextImage() 

在早期版本中,您需要更改的LoadNextImage()方法声明或使用一个小私有的辅助方法与正确的签名:

AddHandler m_switchImageTimer.Tick, AddressOf SwitchImageTimer_Tick 
... 
Private Sub SwitchImageTimer_Tick(sender As Object, e As EventArgs) 
    LoadNextImage() 
End Sub