订阅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