gpt4 book ai didi

javascript - 如何在 JINT Javascript 端创建计时器

转载 作者:搜寻专家 更新时间:2023-11-01 05:21:48 25 4
gpt4 key购买 nike

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

谁能告诉我该怎么做?

谢谢!!

最佳答案

Jint 不支持 setIntervalsetTimeout,因为它们是浏览器中 Window API 的一部分。使用 Jint,而不是浏览器,我们可以访问 CLR,老实说,它更加通用。

第一步是在 CLR 端实现我们的定时器,这是一个非常简单的内置 System.Threading.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 绑定(bind)到 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<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();
}
}

关于javascript - 如何在 JINT Javascript 端创建计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com