我正在编写 C# .NET 代码来使用 COM 对象。COM 接口有一个方法和一个同名的事件。
该方法称为 IncidentCommander 并具有签名:
CommsLibrary.IGuardianComms.IncidentCommander(int, string, sbyte)
该事件也称为 IncidentCommander,具有以下签名:
CommsLibrary.IGuardianCommsEvents.IncidentCommander(int, int, string, sbyte, System.DateTime)
当我尝试通过以下方式绑定到事件时:
_modasCommsLibrary.CrewUpdate += ModasCommsLibraryOnCrewUpdate;
.NET 给出以下编译错误:
“不能分配给‘IncidentCommander’,因为它是‘方法组’。”
我相信它,因为我试图绑定到该方法。
有没有办法强制 .NET 绑定到事件而不是方法?我尝试使用反射来获取事件并手动绑定它,但这也不起作用。
我使用的代码是:
// bind to the incident commander event (because it has the same name as a method...)
var eventInfo = _modasCommsLibrary.GetType().GetEvent("IncidentCommander");
var methodInfo = this.GetType().GetMethod("ModasCommsLibraryOnIncidentCommander");
var handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, _modasCommsLibrary, methodInfo);
我还尝试将 COM 实例转换为事件接口,如下所示(如 Hans 建议的那样):
((IGuardianCommsEvents) _modasCommsLibrary).IncidentCommander += ModasCommsLibraryOnIncidentCommander;
但我得到同样的错误
“不能分配给‘IncidentCommander’,因为它是‘方法组’。”