2

我正在为正在开发的游戏服务器编写脚本界面。我正在使用 MessageBoxes 模仿 NPC 聊天。这是我的脚本:

var a = test("hey");

if (a == true) {
    send("yes");
} else {
    send("no");
}

这是我的代码:

    private TaskCompletionSource<bool> result = new TaskCompletionSource<bool>();

    private void Form1_Load(object sender, EventArgs e)
    {
        var contents = File.ReadAllText(@"C:\test.js");
        var engine = new Engine();

        engine.SetValue("test", new Func<string, Task<bool>>(Test));
        engine.SetValue("send", new Action<string>(Send));

       //new Thread(new ThreadStart(() => engine.Execute(contents))).Start();
        engine.Execute(contents);
    }

    private async Task<bool> Test(string text)
    {
       await Task.Factory.StartNew(() =>
        {
            var a = MessageBox.Show(text, "", MessageBoxButtons.YesNo);

            if (a == DialogResult.Yes)
            {
                result.TrySetResult(true);
            } else
            {
                result.TrySetResult(false);
            }
        });

        return result.Task.Result;
    }

    private void Send(string text)
    {
        MessageBox.Show(text);
    }

现在,当我执行程序时,它确实显示了 MessageBox,但是在它设置结果之后没有任何反应,脚本不会继续。有谁知道为什么?它应该显示“是”或“否”消息框,但事实并非如此。

也许我做错了什么,或者有没有更好的方法来“停止”脚本,直到给出输入?

编辑:好的,我明白了 - 我必须调用 await Test 所以它会等待。但是,我不能从 Javascript 文件中调用 await 关键字。我该如何解决这个问题?

4

0 回答 0