首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#/.net中让一个进程触发另一个进程中的事件?

如何在c#/.net中让一个进程触发另一个进程中的事件?
EN

Stack Overflow用户
提问于 2013-03-17 01:33:22
回答 3查看 4.3K关注 0票数 2

如何使process-1能够触发process-2中的事件,并发送少量参数,以向第二个process发出信号以执行特定操作,并可选地接收应答?

使用文件系统可以做到这一点,可以有一个文件,其中process-1转储一些命令/查询,process-2将不断地从该文件中读取数据,但是,这种解决方案并不好用。

还有别的办法吗?

(我知道,如果在项目属性中启用了“单实例”,则无论何时启动新进程,在VB.net中都很容易触发正在运行的进程中的事件)。

EN

回答 3

Stack Overflow用户

发布于 2013-03-17 01:37:27

您可以使用命名EventWaitHandle来实现跨进程同步。

票数 2
EN

Stack Overflow用户

发布于 2013-03-17 01:40:08

This article似乎做了您习惯使用vb.net single instance做的事情(而且它似乎仍然是一个可行的选择)。

简而言之,似乎有三种方法可以实现类似单实例的解决方案:

对于进程列表,请使用Mutex

  • Cycle查看具有相同名称的进程是否已在运行

  • 使用Visual Basic system

single instance应用程序(可从C#访问)

票数 1
EN

Stack Overflow用户

发布于 2013-03-17 01:45:55

如果“进程”指的是“应用程序域”,那么在两者之间设置事件是相当容易的。事实上,如果您在两个单独的应用程序域中有两个类(其中每个类都将MarshalByRefObject作为基类),那么.net将自动设置一个远程处理结构,该结构将使事件看起来像它们在单个应用程序域中的行为一样。(此处示例:http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx)

不过,这里的关键是“出现”。‘’App domain‘和'process’的分离是为了故意隔离资源。要访问进程之外的任何内容,您确实需要来自操作系统的帮助,比如共享文件、internet连接或命名管道等。但是像事件这样的.net概念并不存在于运行时空间之外。

换句话说,如果两个进程都在同一台机器上,你必须使用命名管道(http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx),如果跨多个系统通信,你必须使用WCF /WCF侦听器(http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx),如果你需要更重的任务,你必须使用WCF。

如果你想看看这些技术在实践中的具体例子,我可以为你写一个,顺便说一句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15452403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档