我在一個過程做EventWaitHandle.Set(後發出的所有進程:一直等到)
_eventWaitHandle.Set();
_eventWaitHandle.Reset();
在另一個過程:
_eventWaitHandle.WaitOne();
Console.WriteLine("Hello");
但從來沒有得到通知(無控制檯輸出)。 它似乎設置爲異步。
如何等待,直到所有服務員在進行Reset()之前發出信號?
我創建等待句柄(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」,因此在部署到最終用戶時可能存在一些安全問題?
你的意思是'線程'而不是'進程' – Rishabh
我的意思是其他進程。 –
然後這種方法不適用於你...你不能使用一個'EventWaitHandle'在兩個不同的進程之間同步 – Rishabh