假设我们在IronPython中有以下代码:
def hello():
print "Hello from Python"
我们在以下C#代码中调用函数hello()
:
private static void GetPythonFunction()
{
ScriptRuntime scriptRuntime = IronPython.Hosting.Python.CreateRuntime();
ScriptScope scope = scriptRuntime.ExecuteFile(@"Python\helloFunc.py");
Action hello = scope.GetVariable<Action>("hello");
hello();
scriptRuntime.Shutdown();
hello(); // after IronPython runtime was disposed
}
这给了我们结果:
Hello from Python
Hello from Python
为什么即使运行时环境被处理,第二次调用hello()
也能工作两次?
答案 0 :(得分:1)
Shutdown
实际上并不终止运行时,它只运行一些清理例程。但事后可能会处于一种奇怪的状态,因此无法保证任何事情都能奏效。
另外,hello
可能(我不记得有关如何创建委托的详细信息)引用了运行时和引擎,保留了GC的所有内容。