.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关闭。知道我哪里做错了吗?

.net跨进程同步

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);并检查它是否正在运行。如果我知道你将如何使用它,那么我可能会建议一个更合适的解决方案。在这种情况下,您不需要互斥锁。