如何创建可在IronPython中处理的C#事件处理程序?

时间:2009-07-03 13:01:39

标签: c# ironpython

如何创建可在IronPython中处理的C#事件处理程序?

请注意,我使用的是IronPython 2.0.1。我能够毫无问题地处理来自系统类的事件(例如Window.KeyDown),但是当我尝试定义自己的C#事件时,当我尝试从IronPython中挂起它时会引发异常。

抛出的异常是ArgumentTypeException,它有消息“无法添加到私有事件”。考虑到我试图挂钩的事件是公开的,这条消息似乎很奇怪。

我的C#类看起来像这样:

class Foo
{
    ...

    public event EventHandler Bar;
}

我的IronPython设置代码如下所示:

ScriptEngine engine = Python.CreateEngine();
ScriptRuntime runtime = engine.Runtime;
ScriptScope scope = runtime.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromFile("Test.py");
Foo bar = new Foo();
scope.SetVariable("Foo", bar);
source.Execute(scope); <-- Exception is thrown here.

我的IronPython脚本如下所示:

def BarHandler(*args):
    pass

Foo.Bar += BarHandler

有人知道我做错了吗?

或者IronPython出了什么问题?

1 个答案:

答案 0 :(得分:3)

我明白了。

班级需要公开以及活动。

例如

public class Foo
{
   ...   

    public event EventHandler Bar;
}