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

Ada*_*ile 3 .net c# c++ events winapi

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

HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));
Run Code Online (Sandbox Code Playgroud)

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

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

Bra*_*ger 6

可以使用ThreadPool.RegisterWaitForSingleObject在发出事件信号时执行回调.通过使用带有字符串名称的EventWaitHandle构造函数获取指定事件对象的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) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)