在处理IronPython运行时之后从C#调用IronPython函数

时间:2014-03-26 19:59:49

标签: c# .net clr ironpython dynamic-language-runtime

假设我们在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()也能工作两次?

1 个答案:

答案 0 :(得分:1)

Shutdown实际上并不终止运行时,它只运行一些清理例程。但事后可能会处于一种奇怪的状态,因此无法保证任何事情都能奏效。

另外,hello可能(我不记得有关如何创建委托的详细信息)引用了运行时和引擎,保留了GC的所有内容。