如何在 JINT Javascript 端创建计时器

2023-12-31

我正在使用 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(使用前将#替换为@)

如何在 JINT Javascript 端创建计时器 的相关文章

  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 如何在 Swift 中组合两个 Dictionary 实例?

    我如何附加一个Dictionary到另一个Dictionary使用斯威夫特 我正在使用AlamoFire将 JSON 内容发送到的库REST https en wikipedia org wiki Representational stat
  • 如何异步使用 Tornado 和 Redis?

    我正在尝试如何异步使用 Redis 和 Tornado 我找到了龙卷风 redis https github com leporo tornado redis但我需要的不仅仅是添加一个yield在代码中 我有以下代码 import redi
  • 如何用图像的像素创建图表?

    现在 我有一个图像 我想生成一个加权图 G V E 其中 V 是顶点集 E 是边集 图像中的每个像素作为图中的节点 但我不知道该怎么做 有人可以帮助我吗 最好是蟒蛇 非常感谢 问题补充 很抱歉我对问题的描述不够清楚 我的目标是使用图像的像素
  • 以编程方式设置 Jetty 配置以增加允许的 URL 长度

    我们使用嵌入式 Jetty 9 3 1 v20150714 并遇到了problem https stackoverflow com q 19549163 421049其中我们的长查询 URL 与其他标头相结合 比允许的长度要长 The so
  • 如何获取/设置 Firebase Cloud Functions v1 环境变量

    我以旧方式使用 Cloud Functions 包中的环境变量functions config 命令 但由于我更新到 v1 0 2 即使通过JSON parse process env FIREBASE CONFIG 就像文档告诉我的那样
  • 从机上的 Jenkins 工作空间路径不一致

    我们设置了一些共享工作空间的工作 各个分支的工作流程是 构建一个名为的大型 C 项目foo 执行多个下游测试 每个测试都使用foo 我们通过分配Use custom workspace构建工作区的下游作业领域 最近 我们选择了一个分支 并将
  • 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

    我正在使用一个ARSession结合一个ARFaceTrackingConfiguration来追踪我的脸 同时 我想从 iPhone X 的前置摄像头录制视频 为此 我使用AVCaptureSession但当我开始录音时ARSession
  • MongoDB 复合键

    我刚刚开始使用 MongoDb 我注意到我得到了很多重复的条目记录 而我本打算是唯一的 我想知道如何对我的数据使用复合键 并且我正在寻找有关如何创建它们的信息 最后 我使用 Java 来访问 mongo 和 morphia 作为我的 ORM
  • $(document).ready() 未针对 ajax 加载的内容执行

    在返回的部分页面中不执行 document ready 的原因可能是什么 两次工作正常 但第三次更新 html 后没有任何反应 alert html alert PopUpItem PopUpItem html html alert in
  • 在 Woocommerce 结帐中为特定选定的运输选项添加正文类别

    如果访问者在 Woocommerce 结账页面上处于特定的送货选项中 我会尝试向页面正文添加一个类 我已经完成了以下操作 但它没有添加课程 有人可以帮忙吗 add filter body class bbloomer wc product
  • 在使用 Transform 旋转时调整 UIView 的大小

    When my UIView使用变换属性旋转 CGAffineTransformMakeRotation 我需要拖动它的一个角 例如右下角 来调整它的大小 在此过程中 当用户拖动角时 视图的角必须跟随用户的手指 并通过增加 2 个边 右下角
  • 什么时候只需要 PartialEq 而不需要 Eq 比较合适?

    我在读铁锈书 https doc rust lang org book appendix 03 derivable traits html并尝试了解用例PartialEq and Eq特征 我意识到PartialEq适用于不一定是自反的关系
  • 动态代理和检查异常

    如何让我的动态代理抛出已检查的异常 我需要一个透明的接口包装器 它有时会抛出已检查的异常 例如IOException 没有第 3 方 AOP 或编写我自己的代理是否可以 手动修改接口的所有 20 个方法也不是一个选择 正如康拉德上面提到的
  • 进入设置屏幕

    我想从我的应用程序中打开 设置 gt 声音和显示 gt 电话铃声 屏幕 我怎样才能做到这一点 根据您的需要 有几种选择可以从您的应用程序中调出 铃声 设置屏幕 如果您想调出通常可通过系统设置访问的实际首选项屏幕 让用户通过应用程序修改手机的
  • 文件上传“multipart/form”异常 org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException

    我尝试使用 Apache Commons 进行文件上传 但抛出以下异常 org apache commons fileupload FileUploadBase InvalidContentTypeException 请求不包含 multi
  • Dropwizard 中的自定义 Jetty 过滤器

    我正在尝试在 Dropwizard 实例中添加自定义标头过滤器 以检查请求的版本是否与 Dropwizard 实例的版本同步 我看到你可以使用FilterBuilder添加码头CrossOriginFilters 但是 我无法弄清楚如何设置
  • 片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

    自从支持版本 25 1 0 和最新的 25 1 1 以来 我在片段替换 添加方面遇到了奇怪的行为 25 1 0 已报告问题Android fragmentTransaction replace 不适用于支持库 25 1 0 https st
  • Huggingface Transformer 问题答案置信度得分

    我们如何从huggingface转换器问题答案的示例代码中获取答案置信度得分 我看到管道确实返回了分数 但是下面的核心也可以返回置信度分数吗 from transformers import AutoTokenizer TFAutoMode
  • 当每个对象可以分为多个组时如何对对象进行分组?

    我有一个List
  • 如何在 JINT Javascript 端创建计时器

    我正在使用 JINT 开发一个 C 项目 https github com sebastienros jint https github com sebastienros jint 我需要在我的 JS 上创建一个计时器 以便每次计时器 ti