gpt4 book ai didi

c# - 从 C# 调用 WaitForSingleObject

转载 作者:可可西里 更新时间:2023-11-01 11:26:36 24 4
gpt4 key购买 nike

我正在尝试从 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;

最佳答案

我不会通过 WinApi 从 C# 获取这个:你在 C# 中有 EventWaitHandler 和其他同步对象,使用它们:

WaitHandle wh = new EventWaitHandler();
//do whatever you need
...
WaitHandler.WaitOne(wh); // equivalent to WaitForSingleObject in WinApi

如果你真的需要与 WinApi 互操作,你可以使用 wh.SafeWaitHandle

我还怀疑 Process.GetCurrentProcess().MainWindowHandle 无法在控制台应用程序中工作,它根本没有任何窗口

关于c# - 从 C# 调用 WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com