我在本机C ++进程中创建并设置/重置了一个全局事件,如下所示:
HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));
是否有任何方法(即使它是由MS编写的库)在.NET(C#)进程中注册其中一个事件,以便在全局事件更改时触发标准.NET事件处理程序?
而且我真的不想等待事件和循环,就像使用WaitForSingleObject的C ++一样...我真的希望它是一个完全异步的事件处理程序。
我必须想象有一种简单的方法可以做到这一点......就是找不到它。
答案 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) { /* ... */ }