я делаю за один процесс :
_eventWaitHandle.Set();
_eventWaitHandle.Reset();
В другом процессе :
_eventWaitHandle.WaitOne();
Console.WriteLine("Hello");
Но никогда не получать уведомления (без вывода на консоль).
Кажется, что Set в асинхронном режиме.
Как я могу подождать, пока все официанты не получат сигнал перед выполнением сброса ()?
Я создаю дескриптор ожидания ( NAMED дескриптор ожидания между процессами ):
internal static EventWaitHandle OpenExistingOrCreateEventWaitHandle(string name)
{
try
{
return EventWaitHandle.OpenExisting(name);
}
catch (WaitHandleCannotBeOpenedException)
{
return new EventWaitHandle(false, EventResetMode.ManualReset, name);
}
}
UPDATE
Пока у меня есть одно "решение"
_eventWaitHandle.Set();
Thread.Sleep(10);
_eventWaitHandle.Reset();
Второй вариант - иметь много дескрипторов для каждого процесса. Но этот код должен работать в любой надстройке офисного приложения или автономном приложении. Поэтому имена должны быть сгенерированы как и как.
Третье - использовать WCF p2p (netPeerTcpBinding) или именованные каналы с UdpDiscoveryEndpoint, но они используют «IP», поэтому могут возникнуть проблемы с безопасностью при развертывании для конечных пользователей?