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