【问题标题】:How to realize .NET Process.Exited event by Win32 API only如何仅通过 Win32 API 实现 .NET Process.Exited 事件
【发布时间】:2013-11-15 16:57:59
【问题描述】:

在 C# 上,很容易检测特定进程 ID 是否已退出。

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

如果只通过 Win32 API 编写与此相同的操作,我应该怎么做?

【问题讨论】:

    标签: c# .net windows winapi process


    【解决方案1】:

    您执行此操作的方式与 .NET Process 类执行此操作的方式完全相同。在进程句柄上使用RegisterWaitForSingleObject()。当句柄收到信号(即进程完成)或可选超时到期时,您的回调将运行。请记住,与 .NET 一样,回调在 theadpool 线程上运行,因此需要适当的同步。

    【讨论】:

    • 谢谢。我试过这个代码: HANDLE wo = NULL; HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid); BOOL res = RegisterWaitForSingleObject(&wo, h, WaitCallback, 0, INFINITE, WT_EXECUTEONLYONCE);关闭句柄(h);
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多