删除一个可能与VB.net中的其他事件完全相同的事件

时间:2011-12-14 02:57:06

标签: vb.net events lua luainterface

我正在VB.net中创建一个通过LuaInterface使用Lua的系统。

要将Lua中的事件与函数相关联,我可以简单地执行此操作:

RegisterEvent("tick", function(nt)
    if not lcc then return end
        if nt>=tt then
            f()
            lcc=false
        end
    end)

如您所见,我目前正在使用lcc变量来“取消”该功能。这是一种被黑客攻击,仍然会调用该函数导致不必要的开销。这就是我的'RegisterEvent'子在我的VB.net中的样子

Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
    Select Case eventName.ToLower
        Case "keydown"
            AddHandler Me.event_keydown, AddressOf func.Call
        Case "keyup"
            AddHandler Me.event_keyup, AddressOf func.Call
        Case "mousedown"
            AddHandler Me.event_mousedown, AddressOf func.Call
        Case "mouseup"
            AddHandler Me.event_mouseup, AddressOf func.Call
        Case "ready"
            AddHandler Me.event_ready, AddressOf func.Call
        Case "tick"
            AddHandler Me.event_tick, AddressOf func.Call
        Case "frame"
            AddHandler Me.event_frame, AddressOf func.Call
    End Select
End Sub

我想在我的Lua中做这样的事情:

local lcc=RegisterEvent("tick", function(nt)
    print("The Ticks Are Now At: "..nt)
    if nt>5000 then
        DisconnectEvent(lcc)
    end
end)

问题是,我不知道应该如何更改我的RegisterEvent函数/ Sub以及如何创建DisconnectEvent。

感谢您的帮助。我知道尝试理解我想说的内容有点烦人。随意发表评论,要求澄清。我将非常愿意尝试并尽我所能来解释它。如果LuaInterface有某种本地处理方式,我也会这样做:)

任何事情都可以提供帮助!

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我。您可能必须使用Dictionary(of String,boolean)来确定是否已附加事件。

Dim eventDict As New Dictionary(Of String, Boolean)

Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
    Select Case eventName.ToLower
        Case "keydown"
           If Not eventDict.ContainsKey(eventName) Then
                eventDict.Add(eventName,false)
           End If
           if eventDict(eventName) Then
                RemoveHandler Me.event_keydown, AddressOf func.Call
                eventDict(eventName)=false
           Else 
                eventDict(eventName)=true
                AddHandler Me.event_keydown, AddressOf func.Call
           End If
     ...
End sub