c# - 监听另一个应用程序中的事件

标签 c# events delegates

假设我有两个用 C# 编写的应用程序。第一个是引发名为“OnEmailSent”的事件的第三方应用程序。

第二个是我编写的自定义应用程序,我想以某种方式订阅第一个应用程序的“OnEmailSent”。

有什么方法可以让我将第二个应用程序以某种方式附加到第一个应用程序的实例以监听“OnEmailSent”事件?


所以为了进一步说明,我的具体情况是我们有一个用 c# 编写的自定义第三方应用程序引发“OnEmailSent”事件。我们可以使用反射器看到事件存在。

我们想要做的是在该组件发送电子邮件时执行一些其他操作。

我们能想到的最有效的方法是按照 anders 的建议使用某种形式的 IPC 并监听第三方组件引发的 OnEmailSent 事件。

因为该组件是用 C# 编写的,所以我们考虑编写另一个 C# 应用程序,该应用程序可以将自身附加到执行进程,并且当它检测到 OnEmailSent 事件已引发时,它将执行它自己的事件处理代码。


我可能遗漏了一些东西,但根据我对远程处理工作原理的理解,需要有一个服务器来定义客户端可以订阅的某种契约。

我更多的是在考虑这样一种情况:有人编写了一个独立的应用程序,例如 outlook,它公开了我想从另一个应用程序订阅的事件。

我想我正在考虑的场景是 .net 调试器以及它如何附加到执行程序集以在运行时检查代码。

最佳答案

为了让两个应用程序(独立的进程)交换事件,它们必须就这些事件的通信方式达成一致。有许多不同的方法可以做到这一点,具体使用哪种方法可能取决于体系结构和上下文。这种进程间信息交换的统称是Inter-process Communication (IPC)。 .存在许多执行 IPC 的标准方法,最常见的是文件、管道、(网络)套接字,remote procedure calls (RPC)和共享内存。在 Windows 上,使用 window messages 也很常见.

我不确定这对于 Windows 上的 .NET/C# 应用程序如何工作,但在 native Win32 应用程序中您可以 hook on to the message loop of external processes and "spy" on the messages they are sending .如果您的程序在调用所需函数时生成消息事件,这可能是一种检测它的方法。

如果您自己实现这两个应用程序,您可以选择使用您喜欢的任何 IPC 方法。网络套接字和更高级别的基于套接字的协议(protocol)(如 HTTP、XML-RPC 和 SOAP)如今非常流行,因为它们允许您在不同的物理机器上运行应用程序(假设它们通过网络连接)。

关于c# - 监听另一个应用程序中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17878/

相关文章:

c# - mono 是否支持带有preserveObjectReferences 标志的DataContractSerializer?

c# - 在 C# 中使用 PropertyInfo 的奇怪问题

c# - 如何测试我的 Linq IQueryable 是否已执行

events - Pusher 应用客户端事件

ios - 如何在键盘上按 "Enter"时触发功能

javascript - 3个文本框,1个按钮,单击按钮将文本放入光标所在的文本框中

javascript - 非 DOM 元素上的事件监听器

C# 事件处理

c# - 类内委托(delegate)的默认值

c# - 从后台线程更新时 UI 稍微卡住