gpt4 book ai didi

c# - WaitForSingleObject 返回 ERROR_INVALID_HANDLE

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:54 27 4
gpt4 key购买 nike

我试图通过调用 WaitForSingleObject() 来确定一个进程是否仍然存在(在我检查的那一刻,我知道它可以在我检查后立即关闭)带句柄从Process.MainWindowHandle得到这与 IsIconic() 一起工作得很好但它返回 WAIT_FAILEDGetLastError() ERROR_INVALID_HANDLE

UInt32 r = WaitForSingleObject(handle, 0);
if(r == WAIT_OBJECT_0)
{
MessageBox.Show("still running!");
}
if(r == WAIT_FAILED)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}

最佳答案

您不能等待窗口句柄。您可以将窗口句柄传递给与窗口相关的函数,例如 IsIconic(),但它们不是内核对象,因此您不能等待它们。 The documentation给出一个你可以等待的对象列表:

The WaitForSingleObject function can wait for the following objects:

  • Change notification
  • Console input
  • Event
  • Memory resource notification
  • Mutex
  • Process
  • Semaphore
  • Thread
  • Waitable timer

所以,如果你想等待一个进程直到它结束,你可以等待进程的句柄,它可以通过Process.Handle访问。属性(property)。

但实际上您根本不需要 P/Invoke Win32 函数。 .NET Process 包装类有 WaitForExit()WaitForInputIdle()可用于等待进程的成员函数(请注意,两者都有采用超时值的重载)。

如果这是您使用 Process 类包装器开始的进程,您可以简单地询问 Process.HasExited属性(property)。

关于c# - WaitForSingleObject 返回 ERROR_INVALID_HANDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38018838/

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