gpt4 book ai didi

c# - 未调用泛型的 Pythonnet 委托(delegate)方法

转载 作者:行者123 更新时间:2023-12-01 08:59:05 50 4
gpt4 key购买 nike

我正在使用 Python 脚本和 Pythonnet 来驱动 C# 库。该库在某些事件上触发委托(delegate)方法。我正在注册委托(delegate)方法,但它没有被调用。

相关方法定义为event EventHandler<EventArgs> SystemInformationUpdated

有趣的是,另一个具有自定义类返回值的方法被调用,定义为 event EventHandler<PeripheralDiscoveredEventArgs> PeripheralDiscovered

当我使用 IronPython 运行此代码时,一切正常,所以我认为这是一个 PythonNET 问题。我的代码是这样的:

from System import EventHandler, EventArgs

(...)

dc = EventHandler[PeripheralDiscoveredEventArgs](centralOnPeripheralDiscovered_callback)
central.PeripheralDiscovered += dc

iuc = EventHandler[EventArgs](systemInformationUpdated_callback)
central.SystemInformationUpdated += iuc

systemInformationUpdated_callback centralOnPeripheralDiscovered_callback 期间被执行函数正在被调用。

我还尝试了以下代码:

from System import EventArgs

(...)

EventHandler = getattr(System, 'EventHandler`1')
dc = EventHandler[PeripheralDiscoveredEventArgs](centralOnPeripheralDiscovered_callback)
central.PeripheralDiscovered += dc

EventHandler = getattr(System, 'EventHandler`1')
iuc = EventHandler[EventArgs](systemInformationUpdated_callback)
central.SystemInformationUpdated += iuc

它也不起作用(因为我相信该错误已在 PythonNET 2.2 中得到纠正)。

使用我得到的控制台

dc
<0, Culture=neutral, PublicKeyToken=null]]>
iuc
<0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]>

iuc对象目标属性是

Target  <__System_EventHandler`1\[\[System_EventArgs\, mscorlib\, Version=4_0_0_0\, Culture=neutral\, PublicKeyToken=b77a5c561934e089\]\]Dispatcher>    __System_EventHandler`1\[\[System_EventArgs\, mscorlib\, Version=4_0_0_0\, Culture=neutral\, PublicKeyToken=b77a5c561934e089\]\]Dispatcher

我也看了

环境:

  • Python 3.6 64 位,
  • PythonNET 2.3.0
  • .NET Framework 4.5.2
  • Windows 7 企业版 64 位

非常感谢!

最佳答案

经过进一步测试,我意识到正在调用回调,抱歉狼来了。我的回调如下:

def systemInformationUpdated_callback(sender, e):
global central
pdict = dict(central.SystemInformation)
print "System Information:"
for key, value in pdict.iteritems():
print " "+key+" = "+value

central.SystemInformationIDictionary<string, string> 。问题是 PythonNET 不会直接从中创建字典,罪魁祸首就是这一行

pdict = dict(central.SystemInformation)

但是这默默地爆炸了,没有抛出异常,并且 System Information:字符串永远不会被打印。所以我认为回调从未被调用。

请注意,此代码在 IronPython 中运行良好。

谢谢!!

关于c# - 未调用泛型的 Pythonnet 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52612651/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com