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

本文关键字:退出 应用程序 另一个 | 更新日期: 2023-09-27 18:21:44

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

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

您可以像这样使用WaitForExit方法:

var process = Process.GetProcessById(process_id);
process.WaitForExit();

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

如果你不想阻塞线程,而是在进程退出时收到通知,你可以使用以下方法:

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

并像这样使用:

NotifyOnProcessExits(process, () => Console.WriteLine("Process has exited"));

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

是的,使用System.Diagnostics。我以前写过一个程序,可以杀死应用程序的两个实例。我不认为当某个特定程序被关闭时,你可以连接一些事件来监控,但你可以定期检查该程序是否仍存在于进程列表中,即使没有找到它,也可以触发。

   if(!Process.GetProcesses().Any(p => p.ProccessId == Id)); { //or Process Name
      //Your logic here
   }

您可以注册进程,然后使用通过事件获得通知

ThreadPool.RegisterWaitForSingleObject

这将允许当前正在进行监视的应用程序按预期运行,而不会被阻止。

请参见此处。