如何在JINT Javascript端创建计时器
我正在使用JINT( https://github.com/sebastienros/jint )开发一个C#项目,我需要在我的JS上创建一个计时器,这样每次定时器时间设置结束时它都可以在我的javascript上执行一个函数。 我怎么能做到这一点? 我使用了setInterval或setTimeout函数,但似乎它们不是JINT的一部分,因为它基于ECMASCRIPT,并且这些函数不是本机的。
谁能告诉我怎么做到这一点?
谢谢!!
Jint不支持setInterval
和setTimeout
,因为它们是浏览器中Window API的一部分。 使用Jint而不是浏览器,我们可以访问CLR,说实话,它更加通用。
第一步是在CLR端实现我们的Timer,这是一个非常简单的内置int System.Threading.Timer
类的Timer包装器:
namespace JsTools { public class JsTimer { private Timer _timer; private Action _actions; public void OnTick(Delegate d) { _actions += () => d.DynamicInvoke(JsValue.Undefined, new[] { JsValue.Undefined }); } public void Start(int delay, int period) { if (_timer != null) return; _timer = new Timer(s => _actions()); _timer.Change(delay, period); } public void Stop() { _timer.Dispose(); _timer = null; } } }
下一步是将JsTimer
绑定到Jint引擎:
var engine = new Engine(c => c.AllowClr(typeof (JsTimer).Assembly))
这是一个用法示例:
internal class Program { private static void Main(string[] args) { var engine = new Engine(c => c.AllowClr(typeof (JsTimer).Assembly)) .SetValue("log", new Action