C# 从c创建Win32事件#

C# 从c创建Win32事件#,c#,events,interop,C#,Events,Interop,我想从C#创建一个内核(也称为命名事件) 我是否必须互操作服务并包装本机CreateEvent函数,或者是否已经有一个.NET类执行此任务 我需要运行的函数应该是这样的: hEvent=CreateEvent(NULL、false、false,“MyCSHARPEvent”) 这将通知所有处理该事件的进程 如果需要包装函数,我将如何将SECURITY_ATTRIBUTES结构从C#转换为win32 看看这门课。从.Net 2.0开始支持它,并允许创建命名事件。它还支持设置事件安全性,具体取决于您

我想从C#创建一个内核(也称为命名事件)

我是否必须互操作服务并包装本机CreateEvent函数,或者是否已经有一个.NET类执行此任务

我需要运行的函数应该是这样的: hEvent=CreateEvent(NULL、false、false,“MyCSHARPEvent”)

这将通知所有处理该事件的进程


如果需要包装函数,我将如何将SECURITY_ATTRIBUTES结构从C#转换为win32

看看这门课。从.Net 2.0开始支持它,并允许创建命名事件。它还支持设置事件安全性,具体取决于您使用的构造函数。

如果您仍要使用interop,可以定义如下函数:

[DllImport("kernel32.dll")]
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
结构如下所示(您可能需要处理Pack属性以使其适合):


此外,这里还有一个将所有内容整合在一起的方法。

Wow-我还以为只有CF有那么大的缺陷(它仍然不支持命名的EventWaitHandles)。CF 3.5现在支持EventWaitHandles。为什么这么多人认为PInvoke是解决一切问题的.net解决方案?@你会意识到你在回答一个超过4年的答案吗?
[StructLayout(LayoutKind.Sequential)]
struct SECURITY_ATTRIBUTES{
  public int length;
  public IntPtr securityDesc;
  public bool inherit;
}