0
我试图在WebView
中使用Skulpt执行Python脚本。如果python脚本包含无限循环应用程序没有响应。在一段时间后取消异步操作WinRT
从C#
await webView.InvokeScriptAsync("evalPy", new string[1] { script });
执行Python脚本的JavaScript:
function evalPy(script) {
try {
var result = Sk.importMainWithBody("<stdin>", false, script);
return Sk.builtins.repr(result).v;
} catch (err) {
}
}
InvokeScriptAsync
是async
操作可能会有一些办法来取消它的任何一点。
我第一次尝试了一段时间后停止Java脚本:
var task = webView.InvokeScriptAsync("evalPy", new string[1] { script }).AsTask<string>();
task.Wait(2000);
task.AsAsyncOperation<string>().Cancel();
第二次尝试:
var op = webView.InvokeScriptAsync("evalPy", new string[1] { script });
new Task(async() =>
{
await Task.Delay(2000);
op.Cancel();
op.Close();
}).Start();
还试图在JavaScript的setTimeout
function evalPy(script) {
try {
var result = Sk.importMainWithBody("<stdin>", false, script);
setTimeout(function() { throw "Times-out"; }, 2000);
return Sk.builtins.repr(result).v;
} catch (err) {
}
}
CodeSkulptor.org也采用Skulpt在Web浏览器中执行Python脚本并停止执行P.一段时间后,ython脚本。
当你'await',该方法不会返回给JavaScript,直到执行做完了。因此无限循环将永远不会返回。当你等待两秒钟然后取消会发生什么? – 2014-10-05 09:31:53
当我等待两秒钟后取消,无限循环继续。调试器将任务状态显示为已取消,但应用程序不响应 – 2014-10-05 09:42:24
python进程将继续执行,但应返回方法调用。你正在做方法调用中的其他任何东西吗? – 2014-10-05 09:47:41