C# 在没有确认的情况下将一位信息(= 布尔值)发送到另一个进程
C# Sending one bit of information (= boolean) to another process without acknowledgement
我目前有两个进程,我想将一个布尔值从一个进程传输到另一个进程,例如用户在某个对话框中按下了确定。但是我不能't/don不想等待其他进程接收到消息,我不知道其他进程是否或何时会收到消息。
先决条件:
- 两个进程(应用程序)都是用 C# 编写的
- 两个进程都知道另一个进程存在
- 两个进程都知道某个 string/keyword 可以用来识别另一个进程
- 传输是单向的,Process1 总是向 Process2 发送数据
- Process1 和 Process2 在同一台 Windows 机器上并且仅存在
- Process1 始终在线,Process2 可能已关闭
目前的选项:
- MemoryMappedFile(内存中)
- MemoryMappedFile(作为文件)
- Named pipes
- WCF
- 很好的旧文件(实际上并不总是那么好)
- 剪贴板(是的,有人这样做)
有些选项有效,但我认为大多数选项对于这种情况来说都有些矫枉过正。另一个问题是什么时候删除这条信息(什么时候清理文件或管道)。
也许有某种我可以写入的缓存?
你有什么想法吗?
PS:如果你post有技术请也提供一段代码
最后我们用了EventWaitHandle
进程 1
handle = new EventWaitHandle(false, EventResetMode.ManualReset, "KEYWORD");
if(secretHappened)
{
handle.Set();
}
进程 2
using(var handle = EventWaitHandle.OpenExisting("KEYWORD")) //this always happens after Process1 so we can assume that the handle exists
{
if(handle.WaitOne(0))
{
//Do your secret stuff
}
}
到目前为止,它运行良好,唯一的问题是来自 Process1 的句柄不能被 GC 清理,并且很难确定何时处理句柄。我们将句柄的生命周期与 Process2 的生命周期相结合,一旦 Process2 不再存在,我们就会处理该句柄。这可能需要一段时间,但这就是我们所做的。由于我们不知道 Process2 中是否使用了句柄,因此我们不能将其用作清理的指标。
我目前有两个进程,我想将一个布尔值从一个进程传输到另一个进程,例如用户在某个对话框中按下了确定。但是我不能't/don不想等待其他进程接收到消息,我不知道其他进程是否或何时会收到消息。
先决条件:
- 两个进程(应用程序)都是用 C# 编写的
- 两个进程都知道另一个进程存在
- 两个进程都知道某个 string/keyword 可以用来识别另一个进程
- 传输是单向的,Process1 总是向 Process2 发送数据
- Process1 和 Process2 在同一台 Windows 机器上并且仅存在
- Process1 始终在线,Process2 可能已关闭
目前的选项:
- MemoryMappedFile(内存中)
- MemoryMappedFile(作为文件)
- Named pipes
- WCF
- 很好的旧文件(实际上并不总是那么好)
- 剪贴板(是的,有人这样做)
有些选项有效,但我认为大多数选项对于这种情况来说都有些矫枉过正。另一个问题是什么时候删除这条信息(什么时候清理文件或管道)。
也许有某种我可以写入的缓存?
你有什么想法吗?
PS:如果你post有技术请也提供一段代码
最后我们用了EventWaitHandle
进程 1
handle = new EventWaitHandle(false, EventResetMode.ManualReset, "KEYWORD");
if(secretHappened)
{
handle.Set();
}
进程 2
using(var handle = EventWaitHandle.OpenExisting("KEYWORD")) //this always happens after Process1 so we can assume that the handle exists
{
if(handle.WaitOne(0))
{
//Do your secret stuff
}
}
到目前为止,它运行良好,唯一的问题是来自 Process1 的句柄不能被 GC 清理,并且很难确定何时处理句柄。我们将句柄的生命周期与 Process2 的生命周期相结合,一旦 Process2 不再存在,我们就会处理该句柄。这可能需要一段时间,但这就是我们所做的。由于我们不知道 Process2 中是否使用了句柄,因此我们不能将其用作清理的指标。