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

本文关键字:方法 调用 python 委托 ironpython 分配 | 更新日期: 2023-09-27 18:24:42

我一直在遵循另一篇文章的指导:

将IronPython方法分配给C#委托

这篇文章还引用了另一个关于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)。

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

这似乎是使用对跳过的"单元测试"函数的引用时出现的问题。

我有:

@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注释对方法的可见性做了一些奇怪的事情?