2009-01-15 13 views
11

Me gustaría crear un núcleo (también conocido como eventos nombrados) de C#.Creando eventos de Win32 desde C#

¿Tengo que interoperar con servicios y ajustar la función CreateEvent nativa o ya existe una clase .NET que hace el trabajo?

La función que se necesita para ejecutar debe ser algo como esto: hEvent = CreateEvent (NULL, falso, falso, "MyCSHARPEvent");

Esto debería notificar a todos los procs que sondeen paraMyCSHARPEvent sobre el evento.

Si es necesario ajustar la función, ¿cómo traduciría la estructura SECURITY_ATTRIBUTES de C# a win32?

Respuesta

18

Echa un vistazo a la clase EventWaitHandle. Es compatible con .Net 2.0 en adelante y permite la creación de eventos con nombre. También es compatible con la configuración de seguridad de eventos, dependiendo del constructor que use.

6

Si aún desea utilizar interoperabilidad, se puede definir la función como esta:

[DllImport("kernel32.dll")] 
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); 

y la estructura como esta (puede que tenga que meterse con el atributo de paquete para que se ajuste):

[StructLayout(LayoutKind.Sequential)] 
struct SECURITY_ATTRIBUTES{ 
    public int length; 
    public IntPtr securityDesc; 
    public bool inherit; 
} 

Además, aquí hay un code example de ponerlo todo junto.

+0

¿Pero por qué lo harías? – ctacke

+0

si su .net 1.1 de soporte – JoshBerke

+0

Wow - Pensé que solo el CF estaba paralizado (aún no es compatible con el nombre EventWaitHandles). – ctacke

Cuestiones relacionadas