2009-01-15 74 views
11

Win32的事件,我想創建一個從C#內核(又名命名事件)。創建從C#

我一定要互操作的服務和包裹本地CreateEvent函數或者是已經存在的.NET類,沒有工作?

我需要運行的函數應該是這樣的: hEvent = CreateEvent(NULL,false,false,「MyCSHARPEvent」);

這應該通知探測forMyCSHARPEvent有關該事件的所有特效。

如果有需要包裝的功能,我將如何轉換從C#中的SECURITY_ATTRIBUTES結構支持WIN32?

回答

18

看看在EventWaitHandle類。它從.Net 2.0開始支持,並允許創建命名事件。它還支持設置事件安全性,具體取決於您使用的構造函數。

6

如果你仍然想互操作使用,你可以這樣定義函數:

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

像這樣的結構(您可能必須與包屬性爛攤子,使其適合):

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

另外,這裏是把他們放在一起的code example

+0

但是,你爲什麼? – ctacke 2009-01-15 17:04:12