c# - 在 .NET 进程中观看本地进程创建的全局事件

标签 c# .net c++ winapi events

我在本地 C++ 进程中创建并设置/重置了一个全局事件,它是这样创建的:

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

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

我不得不想象有一种简单的方法可以做到这一点……只是找不到。

最佳答案

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) { /* ... */ }

关于c# - 在 .NET 进程中观看本地进程创建的全局事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873729/

相关文章:

c++ - 确认注册的 COM 对象 CoCreateInstance 返回 REGDB_E_CLASSNOTREG

c# - 没有属性的C#XmlDocument SelectSingleNode

c# - 没有访问控制服务的 WindowsAzure.ServiceBus 版本

c# - .NET CORE依赖注入(inject)将参数传递给构造函数

c# - 将 .csv 读取到数据表并填充 datagridview

c# - 将 HTML 格式的 Excel 导入 DataTable

c# - 如何检测鼠标点击?

c++ - 如何从源代码中禁用 std::clog 日志记录?

.net - 任何用于逆透视数据的 .Net 函数或 linq 查询

c++ - 在std::unique_ptr的 vector 上使用make_transform_iterator获取const指针