2009-01-15 12 views
11

Ich möchte einen Kernel (aka benannte Ereignisse) aus C# erstellen.Erstellen von Win32-Ereignissen von C#

Muss ich Dienste interoperieren und die native CreateEvent-Funktion umbrechen oder gibt es bereits eine .NET-Klasse, die den Job erledigt?

Die Funktion, die ich ausführen muss, sollte in etwa so aussehen: hEvent = CreateEvent (NULL, false, false, "MyCSHARPEvent");

Dies sollte alle Procs, die forMyCSHARPEvent nach dem Ereignis suchen, benachrichtigen.

Wenn die Funktion umgebrochen werden muss, wie würde ich die Struktur SECURITY_ATTRIBUTES von C# in win32 übersetzen?

Antwort

18

Werfen Sie einen Blick auf die EventWaitHandle Klasse. Es wird ab .NET 2.0 unterstützt und ermöglicht die Erstellung benannter Ereignisse. Je nach verwendetem Konstruktor wird auch die Ereignissicherheit festgelegt.

6

Wenn Sie noch Interop verwenden möchten, können Sie die Funktion wie folgt definieren:

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

und die Struktur wie folgt aus (Sie mit dem Pack-Attribut zu verwirren kann, um es fit zu machen):

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

Auch hier ist ein code example von alles zusammen.

+0

Aber warum sollten Sie? – ctacke

+0

Wenn Sie Unterstützung für .net 1.1 – JoshBerke

+0

Wow - ich dachte, nur die CF war das verkrüppelt (es unterstützt immer noch nicht namens EventWaitHandles). – ctacke