назначение метода ironpython делегату ac #, но метод python не вызывается - PullRequest
0 голосов
/ 14 февраля 2012

Я следовал инструкциям, приведенным в этом другом посте:

Назначение метода IronPython делегату C #

В этом посте также упоминается другой ресурс на более темномуглы IronPython, который имеет некоторую полезную информацию:

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

Я пытаюсь вызвать метод IronPython из C # в качестве делегата.Моя последняя попытка выглядит следующим образом (с использованием 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" никогда не печатается.

Любая идея о том, что я мог бы сделать здесь неправильно?

Я также пытался использовать тот же подход приведения непосредственноделегату C # из метода python.Я видел такое же поведение при использовании этого подхода, то есть проверки вызова метода C #, но не возврата вызова кода Python через делегат.

Я использую IronPython 2.7.1 (ipy.exe).

1 Ответ

1 голос
/ 16 февраля 2012

Похоже, что это была проблема с использованием ссылки на функцию, которая была пропущена "unittest".

У меня было:

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

изменено на:

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

Я также перешел на использование наследования от класса CLR в коде Python для сохранения регистрации функции полностью в коде Python.

Я думаю, аннотация @ unittest.skip делает что-то странное сВидимость метода?

...