如何使进程1能够在进程-2中触发事件,并发送少量参数,以通知第二进程执行特定操作,并可选择接收回复?
可以使用文件系统执行此操作,可能有一个文件,其中process-1转储一些命令/查询,而process-2将不断从该文件读取,但是,这个解决方案并不好。 / p>
还有其他办法吗?
(我知道只要在项目属性中启用“单个实例”,VB.net就可以在启动新进程时在正在运行的进程中触发事件)
答案 0 :(得分:2)
您可以使用命名EventWaitHandle来实现跨进程同步。
答案 1 :(得分:1)
This article似乎与vb.net single instance
完全相同(而且它似乎仍然是一个可行的选择)。
简而言之,似乎有三种方法可以实现像解决方案这样的单一实例:
答案 2 :(得分:1)
如果“进程”是指“app-domain”,那么在两者之间设置事件相当容易。事实上,如果你在两个独立的应用程序域中有两个类(其中每个类都有MarshalByRefObject作为基类),那么.net将自动设置一个远程结构,使事件看起来像在单个应用程序中一样 - 域。 (例如:http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx)
这里的关键是'出现'。 “应用程序域”和“进程”分离旨在保持资源的有效隔离。要访问进程外的任何内容,您真的需要来自操作系统的帮助,例如共享文件或Internet连接或命名管道 - 这样做会有所帮助。但是.net等概念在运行时空间之外不存在。
换句话说,如果两个进程在同一台机器上,如果在多个系统之间进行通信,则必须使用命名管道(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,如果你需要更重的东西。
如果你想在实践中看到其中一种技术的具体例子,我可以为你写一个,顺便说一句。