C#+NLua实现将Lua代码在主线程上执行
2017-10-18 18:39
225 查看
本文示例下载
1.C#与Lua的交互请参考我以前的文章Lua结合C#调用C++或者C的函数
2.在C#中,如何将一片代码片段放在主线程执行呢?对于Winform程序:
对于WPF:
3.在Lua中,将指定代码片段在主线程中执行:
a.lua中的匿名函数:
b.C#中的委托的作用之一就是可以将方法作为参数:
按照这个思路,Lua中的function也是函数,是否可以当作委托传过来?
答案是肯定的。
在C#中,申明如下函数,然后在Lua中调用:
然后在test.lua中填写如下:
其中label1为主窗体上的一个label,设置为public,不然在Lua中访问不到。
最后调用Lua文件:
以上实现了在Lua中,使用线程更新UI的目的。
本文示例下载
1.C#与Lua的交互请参考我以前的文章Lua结合C#调用C++或者C的函数
2.在C#中,如何将一片代码片段放在主线程执行呢?对于Winform程序:
public void ExecuteMethodInMainThread() { if (this.InvokeRequired) { this.Invoke(new Action<Action>(ExecuteMethodInMainThread)); return; } ///填写要在主线程上执行的代码 }
对于WPF:
public void ExecuteMethodInMainThread() { this.Dispather.Invoke(new Action(()=> { ///填写要在主线程上执行的代码 })); }
3.在Lua中,将指定代码片段在主线程中执行:
a.lua中的匿名函数:
local fun=function() return 5; end local result=fun();--b值为5
b.C#中的委托的作用之一就是可以将方法作为参数:
public void Dosomething(Action a) { a(); } public void Delay() { Thread.Sleep(3000); } Dosomething(Delay);
按照这个思路,Lua中的function也是函数,是否可以当作委托传过来?
答案是肯定的。
在C#中,申明如下函数,然后在Lua中调用:
public Form1() { InitializeComponent(); lua = new NLua.Lua(); lua["this"] = this; lua.LoadCLRPackage(); } public void ExecuteMethodInMainThread(Action a) { if (this.InvokeRequired) { this.Invoke(new Action<Action>(ExecuteMethodInMainThread), a); return; } a(); }
然后在test.lua中填写如下:
import("System.Threading"); function UpdateTime() while(true) do local t=os.date("*t"); str=t.hour..":"..t.min..":"..t.sec; this:ExecuteMethodInMainThread( function() this.label1.Text=str; end ); Thread.Sleep(500); end end UpdateTime();
其中label1为主窗体上的一个label,设置为public,不然在Lua中访问不到。
最后调用Lua文件:
private void button1_Click(object sender, EventArgs e) { new Thread(() => { lua.DoFile("test.lua"); }).Start(); }
以上实现了在Lua中,使用线程更新UI的目的。
本文示例下载
相关文章推荐
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- c#实现每隔一段时间执行代码(多线程)
- c#实现每隔一段时间执行代码(多线程)
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- 用c#中实现的,调用cmd来执行bcp的代码
- c#实现每隔一段时间执行代码(多线程)
- c# 即使服务又是可执行程序的代码实现
- 用C#中实现的,调用CMD来执行BCP的代码
- C#之使用AutoResetEvent实现线程的顺序执行
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- vs C# 代码实现执行单元测试用例
- c#实现每隔一段时间执行代码(多线程)
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现 收藏
- C#实现将记事本中的代码编译成可执行文件的方法
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
- 用c#中实现的,调用cmd来执行bcp的代码