Windows .NET кросс-процесс синхронизации - PullRequest
0 голосов
/ 25 июля 2011

Мне нужно выполнить некоторую межпроцессную синхронизацию.

Процесс B должен выполнять некоторые действия только во время работы процесса A.Я пытался использовать Mutex и 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 послеМетод IsProcessARunning 'всегда будет возвращать true, даже если процесс A закрыт.Есть идеи, что я тут делаю не так?

1 Ответ

0 голосов
/ 25 июля 2011

замените 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() при остановке в ProcessA

EDIT2:

Поскольку может произойти сбой processA, вы должны затруднить System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(procAName); и проверьте, работает ли он.Если бы я знал, как именно вы будете использовать это, я мог бы предложить более подходящее решение.В этом случае вам не нужны мьютексы.

...