VB.NET事件地址

VB.NET事件地址,vb.net,events,callback,addressof,Vb.net,Events,Callback,Addressof,我想设置一个回调,该回调将由另一个类在我的类中引发: Public Class CameraWindow Inherits System.Windows.Forms.Control Private m_camera As Camera = Nothing ' Camera property <Browsable(False)> _ Public Property Camera() As Camera

我想设置一个回调,该回调将由另一个类在我的类中引发:

Public Class CameraWindow
        Inherits System.Windows.Forms.Control
        Private m_camera As Camera = Nothing

        ' Camera property
        <Browsable(False)> _
        Public Property Camera() As Camera
            Get
                Return m_camera
            End Get
            Set(value As Camera)
                ' lock
                Monitor.Enter(Me)

                ' detach event
                If m_camera IsNot Nothing Then
                    m_camera.NewFrame -= New EventHandler(AddressOf camera_NewFrame)
                    timer.[Stop]()
                End If

                m_camera = value
                needSizeUpdate = True
                firstFrame = True
                flash = 0

                ' atach event
                If m_camera IsNot Nothing Then
                    m_camera.NewFrame += New EventHandler(AddressOf camera_NewFrame)
                    timer.Start()
                End If

                ' unlock
                Monitor.[Exit](Me)
            End Set
        End Property

        ' On new frame ready
        Private Sub camera_NewFrame(sender As Object, e As System.EventArgs)
            Invalidate()
        End Sub
但是VB.NET不喜欢我附加和分离事件的方式。 有人能告诉我怎么正确地做吗


非常感谢你的帮助

这看起来就像你通常使用C#。在VB.NET中,您可以使用:

要删除处理程序,请使用

但是,如果事件处理程序位于不同的类中,则它需要是公共的:

Public Sub camera_NewFrame(sender As Object, e As System.EventArgs)
    Invalidate()
End Sub
您需要一个实例:

AddHandler Camera.NewFrame, AddressOf m_camera.camera_NewFrame
RemoveHandler m_camera.NewFrame, AddressOf camera_NewFrame
Public Sub camera_NewFrame(sender As Object, e As System.EventArgs)
    Invalidate()
End Sub
AddHandler Camera.NewFrame, AddressOf m_camera.camera_NewFrame