使用 EventWaitHandle 类

Posted

技术标签:

【中文标题】使用 EventWaitHandle 类【英文标题】:Using EventWaitHandle class 【发布时间】:2011-10-03 10:09:07 【问题描述】:

在流程 A 中,我需要从流程 B 接收事件。我决定使用 EventWaitHandle。 在这两个过程中,我都编写了这段代码:

var evhandle = new EventWaitHandle(false, EventResetMode.AutoReset,"MyGUID1221");

然后在进程 A 中调用 Set() 方法:

evhandle.Set();

如何在进程 B 中接收“MyGUID1221”事件并执行一些操作? 如何制作“MyGUID1221”监听器?

谢谢。

【问题讨论】:

【参考方案1】:

“MyGUID121”只是系统范围事件的名称。 您使用WaitOne - 方法收听(读取等待)事件

【讨论】:

我添加了 evhandle.WaitOne();方法来处理 A,但是当 MyGUID1221" 事件被调用时我怎么能运行一些函数?我没有看到一些 EventWaitHandle 事件,当系统调用 MyGUID1221 事件时会上升 WaitOne 将等待事件被设置。您可以使用 WaitOne(0) 检查是否设置了事件(如果设置则返回 true,否则返回 false) - 没有您通常知道的事件,但您可以使用 Task 来等待句柄和/或 ContinueWith on这是某种事件处理程序

以上是关于使用 EventWaitHandle 类的主要内容,如果未能解决你的问题,请参考以下文章

我需要 Dispose() 或 Close() EventWaitHandle 吗?

EventWaitHandle 第一课

我的 EventWaitHandle 说“访问路径被拒绝”,但它不是

等到 EventWaitHandle.Set() 之后通知所有进程

在托管进程中使用 EventWaitHandle 和在非托管进程中使用 WaitForSingleObject 进行跨进程同步

是否可以重构此 EventWaitHandle 以不使用 Thread.Sleep() 来控制竞争条件?