将一个ironpython方法分配给一个c#委托,但不会调用python方法

时间:2012-02-14 02:13:13

标签: c# .net ironpython

我一直在关注这篇文章的指导:

Assigning an IronPython method to a C# delegate

这篇文章还引用了IronPython较暗角落的另一个资源,其中包含一些有用的信息:

http://www.voidspace.org.uk/ironpython/dark-corners.shtml

我试图从C#调用IronPython方法作为委托。我的最新尝试如下(使用System.Action):

IronPython代码:

delegate = Action[String](self.testErrorDelegate);
#csharp library method call
csharp_library.InvokeAction(delegate);

...

@unittest.skip("dev skipping")
def testErrorDelegate(self,message):
    print "error delegate"
    print message;

csharp库代码:

public void InvokeAction(Action<string> listener)
{
    Console.WriteLine("BEFORE INVOKE");
    listener("DO SOMETHING");
    Console.WriteLine("AFTER INVOKE");
}

我的问题是我在运行它时没有得到python testErrorDelegate的输出。也没有运行时错误。我看到了C#Console.WriteLine语句,但从未打印过“DO SOMETHING”。

对于我在这里做错了什么的任何想法?

我也尝试过从python方法直接转换为C#委托的方法。我使用这种方法看到了相同的行为,即验证C#方法调用,但没有通过委托返回对python代码的调用。

我正在使用IronPython 2.7.1(ipy.exe)。

1 个答案:

答案 0 :(得分:1)

看起来这是使用对跳过“unittest”的函数的引用的问题。

我有:

@unittest.skip("dev skipping")
def testErrorDelegate(self,message):
    print "error delegate"
    print message;

更改为:

def errorDelegate(self,message):
    print "error delegate"
    print message;

我还改为使用Python代码中的CLR类继承来保持函数注册完全在python代码中完成。

我猜@ unittest.skip注释会对方法的可见性做些奇怪的事情吗?