如何将c#事件发送到正在工作的lua脚本?
我正在使用c#和LuaInterface,我需要将一个事件从我的c#代码发送到工作脚本。例如,可能是一个按钮的点击中断了脚本的工作或改变了它的逻辑。那么,我该怎么做呢?您要么需要Lua脚本来创建一个全局函数,在事件发生时按名称调用该函数,要么在C#中注册一个函数,Lua代码调用该函数来注册回调。后者要灵活得多如何将c#事件发送到正在工作的lua脚本?,c#,lua,luainterface,C#,Lua,Luainterface,我正在使用c#和LuaInterface,我需要将一个事件从我的c#代码发送到工作脚本。例如,可能是一个按钮的点击中断了脚本的工作或改变了它的逻辑。那么,我该怎么做呢?您要么需要Lua脚本来创建一个全局函数,在事件发生时按名称调用该函数,要么在C#中注册一个函数,Lua代码调用该函数来注册回调。后者要灵活得多 private void Test() { lua.RegisterFunction("setEventHandler", this, GetType().
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脚本;脚本可以使用协同程序暂时将控制权交还给应用程序,但它仍然没有“中断”。没有理由搁置这个问题。回调并不是一个不寻常的概念。在这个时候似乎不会被搁置。