如何仅通过Win32 API实现.NET Process.Exited事件

在C#上,检测特定进程ID是否退出是非常容易的。

Process p = Process.GetProcessById(pid); p.Exited += new EventHandler(OnExited); 

我只能用Win32 API编写相同的操作。

您可以像.NET Process类一样执行此操作。 在进程句柄上使用RegisterWaitForSingleObject() 。 您的回调将在手柄发出信号(即过程已完成)或可选超时过期时运行。 请记住,与.NET一样,回调函数在一个线程池线程上运行,因此需要进行正确的同步。

作为Hans的答案的替代方法,您也可以使用WaitForSingleObject同步等待进程句柄。