跳转至

Controller.Tasks 任务与 OneScript

通过 Controller.Tasks 访问任务集合,每个任务包含一个 OneScriptEngine 实例用于加载和运行 OneScript(Lua)程序。

TaskId 枚举

枚举值 说明
TLibrary 库任务(索引 0)
T01 ~ T31 用户任务 1~31

TasksCollection

属性/方法 类型 说明
[TaskId] Task 按任务 ID 获取任务实例
Count int 可用任务数量
StopPrograms(timeout) void 停止所有任务
StopPrograms(taskIds, timeout) void 停止指定任务

Task

Task 包含以下属性:

属性 类型 说明
Name TaskId 任务标识符
OneScript OneScriptEngine OneScript 脚本引擎实例

OneScriptEngine

操作 方法
加载 Load(从文件) · LoadBuffer(从字符串) · Unload(卸载)
编译 Validate(语法验证,不执行)
运行 Run · Stop
查询 StatusStatus / RefreshStatus / PendingOutput

OneScriptStatus

属性 类型 说明
State OneScriptState 当前状态
CurrentLine int 当前执行行号
ErrorCode int 错误码(0 表示无错)
ErrorMessage string 错误消息
IsRunning bool 是否正在运行
IsPaused bool 是否已暂停
IsCompleted bool 是否已完成
HasError bool 是否有错误

OneScriptState 枚举

枚举值 说明
Idle 空闲(未加载)
Ready 就绪(已加载等待运行)
Running 运行中
Paused 已暂停
Completed 已完成
Error 出错
Stopping 正在停止

OneScriptValidationResult

属性 类型 说明
Succeeded bool 验证是否通过
Errors IReadOnlyList<OneScriptValidationError> 错误列表
RawErrors string 原始错误 JSON

程序监控示例

以下代码演示典型的 ProgramMonitor 模式:加载脚本、运行、轮询状态直到完成:

var script = controller.Tasks[TaskId.T02].OneScript;

script.Load(@"..\..\..\OneScripts\programflow.pgm");
script.Run();

while (true)
{
    script.RefreshStatus();
    OneScriptStatus status = script.Status;
    Console.WriteLine($"State: {status.State,-10} Line: {status.CurrentLine}");

    if (status.IsCompleted || status.HasError || status.State == OneScriptState.Idle)
        break;
    Thread.Sleep(200);
}

if (script.Status.HasError)
{
    Console.WriteLine($"Error {script.Status.ErrorCode}: {script.Status.ErrorMessage}");
    script.Stop();
}

if (!string.IsNullOrEmpty(script.PendingOutput))
{
    Console.WriteLine("Program output:");
    Console.WriteLine(script.PendingOutput);
}

相关页面