如何将c#事件发送到正在工作的lua脚本?

如何将c#事件发送到正在工作的lua脚本?,c#,lua,luainterface,C#,Lua,Luainterface,我正在使用c#和LuaInterface,我需要将一个事件从我的c#代码发送到工作脚本。例如,可能是一个按钮的点击中断了脚本的工作或改变了它的逻辑。那么,我该怎么做呢?您要么需要Lua脚本来创建一个全局函数,在事件发生时按名称调用该函数,要么在C#中注册一个函数,Lua代码调用该函数来注册回调。后者要灵活得多 private void Test() { lua.RegisterFunction("setEventHandler", this, GetType().

我正在使用c#和LuaInterface,我需要将一个事件从我的c#代码发送到工作脚本。例如,可能是一个按钮的点击中断了脚本的工作或改变了它的逻辑。那么,我该怎么做呢?

您要么需要Lua脚本来创建一个全局函数,在事件发生时按名称调用该函数,要么在C#中注册一个函数,Lua代码调用该函数来注册回调。后者要灵活得多

    private void Test()
    {
        lua.RegisterFunction("setEventHandler", this, GetType().GetMethod("SetEventHandler"));
        lua.DoString(@"
            setEventHandler( 
                function(arg) 
                    print('In my event handler:', arg) 
                end)
        ");
        CallEventHandler("This is an event!");
    }

    public delegate void EventHandler(String s);

    private EventHandler _eventHandler;

    public void SetEventHandler(EventHandler eventHandler)
    {
        _eventHandler = eventHandler;
    }

    public void CallEventHandler(string test )
    {
        _eventHandler(test);
    }

你不能打断Lua脚本;脚本可以使用协同程序暂时将控制权交还给应用程序,但它仍然没有“中断”。没有理由搁置这个问题。回调并不是一个不寻常的概念。在这个时候似乎不会被搁置。