Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查看.NET进程中本机进程创建的全局事件 < >我在一个原生C++进程中创建并设置了一个全局事件,它是这样创建的: HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));_C#_.net_C++_Winapi_Events - Fatal编程技术网

C# 查看.NET进程中本机进程创建的全局事件 < >我在一个原生C++进程中创建并设置了一个全局事件,它是这样创建的: HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));

C# 查看.NET进程中本机进程创建的全局事件 < >我在一个原生C++进程中创建并设置了一个全局事件,它是这样创建的: HANDLE hGlobalEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\MyEvent"));,c#,.net,c++,winapi,events,C#,.net,C++,Winapi,Events,是否有任何方法(即使不是MS编写的库)在.NET(C#)进程中注册这些事件之一,以便在全局事件更改时触发标准.NET事件处理程序? 而且我并不真的想等待事件和循环,就像C++中的WaitForSingleObject那样……我真的希望它是完全异步的事件处理程序。 我不得不想象有一种简单的方法可以做到这一点……就是找不到它。可以用于在事件发出信号时执行回调。通过使用采用字符串名称的获取命名事件对象的WaitHandle bool createdNew; WaitHandle waitHandle

是否有任何方法(即使不是MS编写的库)在.NET(C#)进程中注册这些事件之一,以便在全局事件更改时触发标准.NET事件处理程序?
而且我并不真的想等待事件和循环,就像C++中的WaitForSingleObject那样……我真的希望它是完全异步的事件处理程序。 我不得不想象有一种简单的方法可以做到这一点……就是找不到它。

可以用于在事件发出信号时执行回调。通过使用采用字符串名称的获取命名事件对象的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) { /* ... */ }

EventWaitHandle将打开在Win32进程中创建的事件,而不是创建新事件,对吗?是的,您可以调用的构造函数有一个重载来验证这一点;它有一个'out'bool参数,告诉您事件是已经存在还是由构造函数创建的。在您的情况下,out值应该为false。我已经更新了代码片段来展示这一点。太棒了…谢谢你的更新。这真的很有帮助。现在,也许这个问题的一个解决方案会出现在谷歌上:)好吧……这种方法很有效。问题是,我需要知道事件的实际状态,而这一切所做的就是为RegisterWait中的第三个参数传递什么。另外,如果我将最后一个参数保留为true,它只会触发一次,我必须继续重新注册,但如果我将其设置为false,它只会在事件状态发生更改时无休止地调用回调。。。虽然我还不知道这个状态是什么……在C++中,对事件的等待只返回事件状态被更改为“信号”(true),而不是当它变回未发送信号(false)时返回。因此你天生就知道状态。您还可以使用0超时调用wait,如果它返回wait\u对象,则状态为true,如果WAIF\u timeout,则状态为false。但这段C#代码似乎在状态发生任何变化时都会运行回调。。。。