2

我正在编写 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’,因为它是‘方法组’。”

4

0 回答 0