c# - 没有调用泛型的 Pythonnet 委托方法
问题描述
我正在使用带有 Pythonnet 的 Python 脚本来驱动 C# 库。这个库在某些事件上触发委托方法。我正在注册委托方法,但没有被调用。
有问题的方法定义为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 属性是
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 框架 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.SystemInformation
是一个IDictionary<string, string>
。问题是 PythonNET 不会直接从中创建字典,罪魁祸首是这一行
pdict = dict(central.SystemInformation)
但这会悄无声息地爆炸,不会抛出异常,System Information:
也不会打印字符串。所以我认为回调永远不会被调用。
请注意,此代码在 IronPython 上运行良好。
谢谢!!
推荐阅读
- javascript - Typescript - 如何让包用户导入 dist 文件夹作为包名?
- javascript - 函数工作得很好,但现在我得到函数返回未定义、预期的承诺或值错误
- ios - 按下 NavigationLink 时隐藏箭头和突出显示
- vega - Vega Lite 在行和列之间独立缩放
- vb.net - 水晶报表突然打印详细信息部分两次
- python-3.x - 拆分和连接字符串(列表索引超出范围)
- php - 如何在 Laravel 中使用数据透视表连接 3 个表?
- swift - iOS 邮件编写器自动关闭
- ios - 从纬度、经度数组中反向地理编码仅返回一个地址
- jenkins - 詹金斯作业执行中的“java.net.SocketException:套接字关闭”异常