Csharp/C#教程:如何在JINT Javascript端创建计时器分享


如何在JINT Javascript端创建计时器

我正在使用JINT( https://github.com/sebastienros/jint )开发一个C#项目,我需要在我的JS上创建一个计时器,这样每次定时器时间设置结束时它都可以在我的javascript上执行一个函数。 我怎么能做到这一点? 我使用了setInterval或setTimeout函数,但似乎它们不是JINT的一部分,因为它基于ECMASCRIPT,并且这些函数不是本机的。

谁能告诉我怎么做到这一点?

谢谢!!

Jint不支持setIntervalsetTimeout ,因为它们是浏览器中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)) 

这是一个用法示例:

上述就是C#学习教程:如何在JINT Javascript端创建计时器分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

 internal class Program { private static void Main(string[] args) { var engine = new Engine(c => c.AllowClr(typeof (JsTimer).Assembly)) .SetValue("log", new Action(Console.WriteLine)) .Execute( @" var callback=function(){ log('js'); } var Tools=importNamespace('JsTools'); var t=new Tools.JsTimer(); t.OnTick(callback); t.Start(0,1000); "); Console.ReadKey(); } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1043252.html

(0)
上一篇 2022年1月31日
下一篇 2022年1月31日

精彩推荐