在VB.NET中订阅事件

时间:2011-08-28 10:43:22

标签: wpf vb.net events

我正在尝试将一些C#代码转换为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下:

  

错误1'公共事件标记(sender As Object,e As System.EventArgs)'是一个事件,不能直接调用。使用'RaiseEvent'语句来引发事件

并在LoadNextImage()下突出显示会产生以下错误:

  

错误3表达式不会产生值。

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

  

错误1'公共事件标记(sender As Object,e As System.EventArgs)'是一个事件,不能直接调用。使用'RaiseEvent'语句来引发事件。

如何将C#代码转换为VB.NET?

由于 本

1 个答案:

答案 0 :(得分:12)

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