C#调用SetEvent-EventModify

来源:互联网 发布:游戏数据分析师招聘 编辑:程序博客网 时间:2024/06/13 10:09

C# 如果想使用SetEvent,但是cordll并没有导出这个函数。下面是在mobile中使用的情况。

windows mobile 系统coredll.dll并没有真正暴露SetEvent等函数,而是以EventModify替代了三个API。

其原型应该是EventModify(HANDLE ,DWROD)

第二个参数的定义如下:

 

#define EVENT_PULSE     1
#define EVENT_RESET     2
#define EVENT_SET         3

 

样例:

C# Signature:using HANDLE = System.IntPtr;...[DllImport("coredll.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EventModify(HANDLE hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent);VB Signature:Declare Function EventModify Lib "coredll.dll" (ByVal hEvent As IntPtr, ByVal func As Integer) As BooleanDeclare Function EventModify Lib "coredll.dll" (TODO) As TODOUser-Defined Types:private enum EventFlags{     EVENT_PULSE = 1,     EVENT_RESET = 2,     EVENT_SET = 3}Alternative Managed API:Do you know one? Please contribute it!Notes:None.Tips & Tricks:Please add some!Sample Code:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using HANDLE = System.IntPtr;namespace Test{     class Program     {        [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]        public static extern HANDLE CreateEvent(HANDLE lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName);        [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CloseHandle(HANDLE hObject);        [DllImport("coredll.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool EventModify(HANDLE hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent);        public enum EventFlags        {                PULSE = 1,                RESET = 2,                SET = 3        }        private static bool SetEvent(HANDLE hEvent)        {                return EventModify(hEvent, (int)EventFlags.SET);        }        private static bool ResetEvent(HANDLE hEvent)        {                return EventModify(hEvent, (int)EventFlags.RESET);        }        static void Main(string[] args)        {                IntPtr p = CreateEvent(HANDLE.Zero, false, true, string.Empty);                SetEvent(p);                ResetEvent(p);                CloseHandle(p);        }     }}


 

原创粉丝点击