2009-01-15 23 views
11

C# 'dan bir çekirdek (adlandırılmış olaylar) oluşturmak istiyorum.C# ile Win32 olayları oluşturma #

Yerel hizmetlerim ve yerel CreateEvent işlevini sarmak zorunda mıyım yoksa iş yapan bir .NET sınıfı var mı?

Çalıştırmam gereken işlev şu şekilde olmalıdır: hEvent = CreateEvent (NULL, false, false, "MyCSHARPEvent");

Bu olay hakkında MysCSHARPEvent için problama yapan tüm provaları bildirmelidir.

İşlevi sarmaya ihtiyaç varsa, SECURITY_ATTRIBUTES yapısını C# dan win32'ye nasıl çevirebilirim?

cevap

18

EventWaitHandle sınıfına bir göz atın. .Net 2.0'dan itibaren destekleniyor ve adlandırılmış olayların oluşturulmasına izin veriyor. Ayrıca, kullandığınız kurucuya bağlı olarak olay güvenliğini ayarlama özelliğini de destekler.

6

yine birlikte çalışma kullanmak istiyorsanız, böyle bir işlevi tanımlayabilirsiniz:

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

ve bunun gibi yapı (bunu sığdırmak için Paketi özniteliği ile karmaşa gerekebilir):

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

Ayrıca, hepsi bir araya getirmek için bir code example.

+0

Ama neden yapardınız? – ctacke

+0

Eğer destekleyici .net 1.1 – JoshBerke

+0

Wow - Sadece CF'nin sakat olduğunu sanıyordum (yine de EventWaitHandles adlı ismi desteklemiyor). – ctacke