我正在为正在开发的游戏服务器编写脚本界面。我正在使用 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 关键字。我该如何解决这个问题?