ReoScript引擎的简单使用

今天写了三个简单例子,玩一玩这个ReoScript引擎

首先看界面

分别是三个按钮,第一个按钮,弹出一个提示框,第二个创建一个窗体,第三个从文件中读出脚本并执行

主要代码如下

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using unvell.ReoScript;

namespace ReoScript_BuildUI
{
    public partial class Form1 : Form
    {
        private readonly ScriptRunningMachine _srm = new ScriptRunningMachine();
        public Form1()
        {
            InitializeComponent();
        }

        //弹出提示框
        private void button1_Click(object sender, EventArgs e)
        {
            CompiledScript script = _srm.Compile("alert('Hello World');");
            _srm.RunCompiledScript(script);
        }

        //导入.net命名空间,并创建一个窗体
        private void button2_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("     import System.Windows.Forms.*;  ");
            sb.AppendLine("     import System.Drawing.*;  ");
            sb.AppendLine("       ");
            sb.AppendLine("     var f = new Form() { ");
            sb.AppendLine("       text: 'ReoScript Form', startPosition: 'CenterScreen',   ");
            sb.AppendLine("       resize: function() { link.location = { x: (this.width - link.width) / 2, y : link.top }; },  ");
            sb.AppendLine("       load: function() { updateLabelText(); }  ");
            sb.AppendLine("     };  ");
            sb.AppendLine("       ");
            sb.AppendLine("     var link = new LinkLabel() {  ");
            sb.AppendLine("       text: 'click me to close window', autoSize: true, location: { x: 75, y: 100 },  ");
            sb.AppendLine("       click: function() { f.close(); f = null; },  ");
            sb.AppendLine("     };  ");
            sb.AppendLine("       ");
            sb.AppendLine("     var stateCount = 10, stateIndex = 0;  ");
            sb.AppendLine("       ");
            sb.AppendLine("     var lab = new Label() {  ");
            sb.AppendLine("       text: '='.repeat(stateCount), location: { x: 100, y: 50 }, autoSize: true,  ");
            sb.AppendLine("     };  ");
            sb.AppendLine("       ");
            sb.AppendLine("     function updateLabelText() {  ");
            sb.AppendLine("       lab.text = '='.repeat(stateIndex) + '>' + '='.repeat(stateCount - stateIndex);  ");
            sb.AppendLine("       if(stateIndex<stateCount) stateIndex++; else stateIndex = 0;  ");
            sb.AppendLine("       ");
            sb.AppendLine("       if(f != null) setTimeout(updateLabelText, 100);  ");
            sb.AppendLine("     }  ");
            sb.AppendLine("       ");
            sb.AppendLine("     f.controls.addRange([link, lab]);  ");
            sb.AppendLine("     f.showDialog();  ");
            _srm.WorkMode |= MachineWorkMode.AllowDirectAccess
                             | MachineWorkMode.AllowCLREventBind
                             | MachineWorkMode.AllowImportTypeInScript;
            _srm.Run(sb.ToString());
        }

        //从文件中导入脚本并执行
        private void button3_Click(object sender, EventArgs e)
        {
            var path = Application.StartupPath + @"\Script.txt";
            if (File.Exists(path))
            {
                var file = new FileInfo(path);
                _srm.WorkMode |= MachineWorkMode.AllowDirectAccess
                                 | MachineWorkMode.AllowCLREventBind
                                 | MachineWorkMode.AllowImportTypeInScript;
                _srm.Run(file);
            }
        }
    }
}

说一说Run和RunCompiledScript这两个方法的区别,Run执行脚本每次都要重新编译,而RunCompiledScript只会编译一次,后面再重复调用的时候,可以提高执行效率,比如说在一个循环里面重复执行一段脚本

CompiledScript code = srm.Compile(script);
...
for (int i = 0; i < 10; i++) {
    srm.RunCompiledScript(code); 
}
文中源代码可以在 这里下载



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值