监听另一个应用程序的退出

7he*_*ing 3 .net c# events

使用C#和.Net终止/关闭特定的Windows应用程序时,是否可以获得通知?可以是Windows作业列表中侦听的任何应用程序。

Yac*_*sad 5

您可以使用如下WaitForExit方法:

var process = Process.GetProcessById(process_id);

process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

这将导致正在执行的线程等待直到进程退出。

如果您不想阻塞线程,而是在进程退出时收到通知,则可以使用以下命令:

public static void NotifyOnProcessExits(Process process, Action action)
{
    Task.Run(() => process.WaitForExit()).ContinueWith(t => action());
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

NotifyOnProcessExits(process, () => Console.WriteLine("Process has exited"));
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案将使一个线程池线程等待进程退出。您可能可以找到一个真正异步的更好的解决方案,但是我不确定。