.net跨进程同步
本文关键字:进程同步 net | 更新日期: 2023-09-27 18:03:30
我需要做一些跨进程同步。
进程B应该只在进程A运行时执行一些操作。我尝试像这样使用互斥锁和EventWaitHandles:
进程A main:
EventWaitHandle eventWaitHandle = new EventWaitHandle(true, EventResetMode.ManualReset, "SOMEGUID");
进程B:
private static bool IsProcessARunning(string mutexStr)
{
try
{
EventWaitHandle.OpenExisting(mutexStr);
return true;
}
catch (WaitHandleCannotBeOpenedException e)
{
return false;
}
}
但是在进程A启动之后,一旦' isprocessarrunning '方法将始终返回true,即使进程A关闭。知道我哪里做错了吗?
将EventWaitHandle.OpenExisting(mutexStr);
替换为EventWaitHandle.OpenExisting(mutexStr).WaitOne(-1,false);
,以便等待事件
变化:EventWaitHandle eventWaitHandle = new EventWaitHandle(true, EventResetMode.ManualReset, "SOMEGUID");
EventWaitHandle eventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, "SOMEGUID");
启动时必须调用eventWaitHandle.Set()
,停止时必须调用eventWaitHandle.Reset()
EDIT2:
因为processA可能已经崩溃了,你应该实现
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(procAName);
并检查它是否正在运行。如果我知道你将如何使用它,那么我可能会建议一个更合适的解决方案。在这种情况下,您不需要互斥锁。