これは基本的に、IronPython コンソールが Ctrl-C を処理する方法を適応させたものです。ソースを確認したい場合は、 と にBasicConsole
ありCommandLine.Run
ます。
まず、別のスレッドで IronPython エンジンを起動します (想定どおり)。ユーザーのコードを実行するときは、try ... catch(ThreadAbortException)
ブロックでラップします。
var engine = Python.CreateEngine();
bool aborted = false;
try {
engine.Execute(/* whatever */);
} catch(ThreadAbortException tae) {
if(tae.ExceptionState is Microsoft.Scripting.KeyboardInterruptException) {
Thread.ResetAbort();
aborted = true;
} else { throw; }
}
if(aborted) {
// this is application-specific
}
ここで、IronPython スレッドへの参照を手元に置いておく必要があります。フォームにボタン ハンドラーを作成し、 を呼び出しますThread.Abort()
。
public void StopButton_OnClick(object sender, EventArgs e) {
pythonThread.Abort(new Microsoft.Scripting.KeyboardInterruptException(""));
}
このKeyboardInterruptException
引数により、Python スレッドは をトラップしThreadAbortException
て として処理できKeyboardInterrupt
ます。