从外部应用程序在C#中触发事件?

6
有没有办法从外部应用程序(特别是从Ruby)在C#中触发事件? 我需要从Rails应用程序中引起C#中的某些事情发生。
4个回答

6
我假设你所说的“外部应用程序”是指C#代码进程空间之外的某些东西。此外,我认为你并不是在提到C#事件——这不是.NET实现领域之外的概念——它们不是从代码之外访问的内容。
因此,对于这个问题的一般答案是“是的,这是可能的”——但由于您基本上是尝试发送进程间通知,因此您将需要使用某种IPC机制
.NET具有丰富的API来执行IPC,从命名管道到DCOM,再到像TCP/IP这样的低级网络协议。您使用哪种方法取决于这些进程需要通信的环境(在单台计算机上,在局域网上跨机器,在互联网上等)。这还将取决于您交换的信息类型以及您愿意付出多少努力。对于.NET 3.5应用程序,您通常可以找到一个支持的实现,使用WCF作为统一框架
显然,所有这些都取决于您修改.NET应用程序实现(读取源代码)的能力,以在其中引发事件。如果您无法做到这一点,并且该代码中没有现有的IPC机制,则很可能会陷入困境。
更新:针对您的评论:
你推荐什么,优先考虑易用性和时间。 两个应用程序都在同一台计算机上运行,我自己编写它们
我建议使用命名管道。命名管道最初是Unix概念-但它们也可在Windows上使用。它们具有非常简单的编程接口(类似于使用文件),并且在单机场景下不需要太多使用。
在Ruby方面(我不太熟悉),以下是一些您可能会发现有用的链接:

在.NET方面,以下是一些相关链接,可供了解更多信息:


你的假设是正确的。你会建议轻松和时间优先吗?两个应用程序都在同一台机器上运行,我自己编写它们。 - tybro0103
根据您的描述,我可能会考虑使用命名管道。如果我没记错的话,Ruby有内置库可以轻松地与命名管道交互,在.NET中也有许多内置API可用于执行异步读/写操作到命名管道。此外,WCF也支持它们。我将更新我的答案,提供相关资源的链接。 - LBushkin

1
一个显而易见的解决方案是使用网络消息。可以使用短暂的TCP/IP连接,或者如果两个应用程序在同一主机上,则可以使用简单的UDP数据包。
C#应用程序将接受连接(如果是TCP),从套接字读取事件,最后处理它们。

0
进一步解释Martin的答案,您可以考虑使用一种消息协议,该协议在目标语言中都有可用的库。类似Stomp这样的东西就会浮现在脑海中。

0

你可以尝试使用消息队列,特别是那些支持多个平台和语言的队列,比如ActiveMQ。我认为它应该有添加消息接收事件处理程序的能力,以便您可以实现异步传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接