观察由.NET进程中的本机进程创建的全局事件

时间:2009-05-17 01:51:55

标签: c# .net c++ winapi events

我在本机C ++进程中创建并设置/重置了一个全局事件,如下所示:

HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));

是否有任何方法(即使它是由MS编写的库)在.NET(C#)进程中注册其中一个事件,以便在全局事件更改时触发标准.NET事件处理程序?
而且我真的不想等待事件和循环,就像使用WaitForSingleObject的C ++一样...我真的希望它是一个完全异步的事件处理程序。

我必须想象有一种简单的方法可以做到这一点......就是找不到它。

1 个答案:

答案 0 :(得分:6)

发出事件信号时,

ThreadPool.RegisterWaitForSingleObject可用于执行回调。使用带有字符串名称的EventWaitHandle constructor获取指定事件对象的WaitHandle。

bool createdNew;
WaitHandle waitHandle = new EventWaitHandle(false,
    EventResetMode.ManualReset, @"Global\MyEvent", out createdNew);
// createdNew should be 'false' because event already exists
ThreadPool.RegisterWaitForSingleObject(waitHandle, MyCallback, null,
    -1, true);

void MyCallback(object state, bool timedOut) { /* ... */ }