我正在尝试从 C# 调用 WaitForSingleObject 方法,如此处所述:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx
为了调用这个函数我需要创建一个Handle,或者我需要得到一个IntPtr类型的Handle,怎么做呢?
我已经尝试过我发现的这个功能: http ://www.pinvoke.net/default.aspx/kernel32.WaitForSingleObject
[DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
public static extern IntPtr CreateEvent(HANDLE lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName);
或者例如,当我从控制台获取句柄时:
IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
它抛出一个 DllNotFoundException。
这里有什么问题?
我需要它来运行这个函数调用的进程,并从它的进程中获取一个转储,以便我的 ClrMd 库学习。
任何帮助将不胜感激。
代码示例:
static void Main(string[] args)
{
var autoEvent = new AutoResetEvent(false);
//this is where I get the DllNotFoundException
WaitForSingleObject(autoEvent.Handle, WAIT_TIMEOUT );
}
[DllImport("kernel32.dll")]
static extern uint WaitForMultipleObjects(uint nCount, IntPtr[] lpHandles, bool bWaitAll, uint dwMilliseconds);
public const Int32 WAIT_TIMEOUT = 0x102;