在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL

Raise .NET event from one DLL to another in C++/CLI

本文关键字:DLL 一个 另一个 CLI C++ 中将 NET 事件      更新时间:2023-10-16

我有一个本机C++应用程序和两个用C#编写的dll。假设本机C++应用程序是"AnApp",两个 dll 是"RaiseEvent".dll和"HandleEvent.dll
两个 C# dll 中的每一个都包含一个类。 RaiseEvent 启动一个事件,HandleEvent 订阅此事件,以便执行名为"ReceiveEvent"的方法。

在AnApp中,有一个C++/CLI类用作包装器。 在这个包装器中,我实例化了一个来自 RaiseEvent 的对象和另一个来自 HandleEvent 的对象。
然后,事件启动(我可以在调试器中看到它(。我本以为该事件将在 HandleEvent 类中处理,但它没有发生。我的意思是,它永远不会进入接收事件方法。

我把所有这些都作为概念证明,我不确定它是否应该有效。

因此,问题是,当每个 dll 通过 C++/CLI 包装器在本机C++应用程序中使用时,是否可以处理从一个 .NET dll 到另一个 .NET dll 的事件?

如果不看到一些示例代码,就很难理解您的确切问题,但我会试一试。

实例化对象不足以将事件链接到事件处理程序。 该活动必须通过+=运营商订阅

var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
raiseEvent.TheEvent += handleEvent.ReceiveEvent;

我不建议公开ReceiveEvent这样的功能。 但是HandleEvent对象需要访问TheEvent实例才能订阅它。

也许像这样:

class HandleEvent
{
//...
public void Subscribe(RaiseEvent eventRaiser)
{
eventRaiser.TheEvent += this.ReceiveEvent;
}
}
//...
var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
handleEvent.Subscribe(raiseEvent);