如何使 process-1 能够在 process-2 中触发事件,并发送一些参数,以指示第二个进程执行特定操作,并可选择接收回复?
可以使用文件系统来执行此操作,可能有一个文件,其中 process-1 转储了一些命令/查询,而 process-2 将不断地从该文件中读取,但是,这个解决方案并不好。
还有其他方法吗?
(我知道在 VB.net 中很容易在启动新进程时触发正在运行的进程中的事件,如果在项目属性中启用了“单个实例”)
如何使 process-1 能够在 process-2 中触发事件,并发送一些参数,以指示第二个进程执行特定操作,并可选择接收回复?
可以使用文件系统来执行此操作,可能有一个文件,其中 process-1 转储了一些命令/查询,而 process-2 将不断地从该文件中读取,但是,这个解决方案并不好。
还有其他方法吗?
(我知道在 VB.net 中很容易在启动新进程时触发正在运行的进程中的事件,如果在项目属性中启用了“单个实例”)
您可以使用命名的EventWaitHandle来实现跨进程同步。
如果“进程”是指“应用程序域”,那么在两者之间设置事件是相当容易的。事实上,如果你在两个独立的应用程序域中有两个类(每个类都有 MarshalByRefObject 作为基类),那么 .net 将自动设置一个远程处理结构,使事件看起来像在单个应用程序中一样 -领域。(这里的例子:http: //msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx)
不过这里的关键是“出现”。“应用程序域”和“进程”分离旨在有意保持资源隔离。要访问您的进程之外的任何内容,您确实需要操作系统的帮助,例如共享文件或 Internet 连接或命名管道 - 类似的东西。但是像事件这样的 .net 概念在运行时中不存在于您的空间之外。
换句话说,如果两个进程都在同一台机器上,您必须使用类似 Named-Pipes ( http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx ) 的东西, TCPClient/TCPListener ( http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx ) 如果跨多个系统进行通信,或者 WCF 如果您需要更重的任务。
如果您想在实践中看到其中一种技术的具体示例,我可以为您写一个,顺便说一句。