假设我有两个用C#编写的应用程序.第一个是第三方应用程序,它引发一个名为"OnEmailSent"的事件.
第二个是我写的自定义应用程序,我想以某种方式订阅"OnEmailSent"甚至是第一个应用程序.
有什么方法可以以某种方式将第二个应用程序附加到第一个应用程序的实例来监听"OnEmailSent"事件?
因此,为了进一步说明,我的具体方案是我们有一个用c#编写的自定义第三方应用程序,它引发了一个"OnEmailSent"事件.我们可以看到使用反射器存在事件.
我们想要做的是在此组件发送电子邮件时进行一些其他操作.
我们能够想到的最有效的方法是能够使用某种形式的IPC作为anders建议并监听由第三方组件引发的OnEmailSent事件.
因为组件是用C#编写的,所以我们想要编写另一个可以将自己附加到执行进程的C#应用程序,当它检测到OnEmailSent事件已经被提升时,它将执行它自己的事件处理代码.
我可能会遗漏一些东西,但据我所知,远程处理的工作原理是需要一台服务器来定义客户可以订阅的某种合同.
我更多地考虑有人编写了一个独立的应用程序,例如outlook,它暴露了我想从另一个应用程序订阅的事件.
我想我正在考虑的场景是.net调试器以及它如何附加到执行程序集以在代码运行时检查代码.
为了使两个应用程序(单独的进程)交换事件,他们必须就如何传达这些事件达成一致.有许多不同的方法可以做到这一点,确切地说使用哪种方法可能取决于架构和上下文.进程之间这种信息交换的一般术语是进程间通信(IPC).存在许多做IPC的标准方法,最常见的是文件,管道,(网络)套接字,远程过程调用(RPC)和共享内存.在Windows上,使用窗口消息也很常见.
我不确定它如何适用于Windows上的.NET/C#应用程序,但在本机Win32应用程序中,您可以挂接到外部进程的消息循环,并对他们发送的消息进行"间谍".如果程序在调用所需函数时生成消息事件,则可能是检测它的方法.
如果您自己实现这两个应用程序,则可以选择使用您喜欢的任何IPC方法.如今,网络套接字和基于套接字的高级协议(如HTTP,XML-RPC和SOAP)非常流行,因为它们允许您在不同的物理机器上运行应用程序(假设它们通过网络连接).