我正在使用 JINT 开发一个 C# 项目(https://github.com/sebastienros/jint https://github.com/sebastienros/jint),我需要在我的 JS 上创建一个计时器,以便每次计时器 tim 设置结束时它都可以在我的 javascript 上执行一个函数。我怎样才能做到这一点?我使用过 setInterval 或 setTimeout 函数,但它们似乎不是 JINT 的一部分,因为它基于 ECMASCRIPT 并且该函数不是本机的。
有人可以告诉我该怎么做吗?
Thanks!!
Neither setInterval
and setTimeout
受 Jint 支持,因为它们是浏览器中 Window API 的一部分。有了 Jint,我们就可以访问 CLR,而不是浏览器,而且说实话,它的用途更加广泛。
第一步是在 CLR 端实现我们的计时器,这是一个非常简单的内置计时器包装器System.Threading.Timer
class:
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
至锦特引擎:
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<object>(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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)