質問

Suppose we have the following code in IronPython:

def hello():
    print "Hello from Python"

We call function hello() in the following C# code:

    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
    }

Which gives us result:

Hello from Python
Hello from Python

Why the second call hello() works twice even though the runtime environment was disposed?

役に立ちましたか?

解決

Shutdown doesn't actually terminate the runtime, it just runs some cleanup routines. Things might be in a strange state afterwards, though, so there's no guarantee anything will work.

Plus, hello probably (I don't recall the exact details of how the delegates are created) has references to the runtime and engine keeping everything from being GC's.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top