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

时间:2015-11-11 20:08:47

标签: c# .net events

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

3 个答案:

答案 0 :(得分:5)

您可以使用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"));

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

答案 1 :(得分:0)

是使用System.Diagnostics。我之前编写了一个程序,它会杀死一个应用程序的双实例。我不认为有些事件可以在特定程序关闭时连接以监视,但是您可以定期检查程序是否仍然存在于进程列表中,并且即使找不到它也会触发。

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

答案 2 :(得分:0)

您可以注册该流程,然后使用

通过活动获得通知
ThreadPool.RegisterWaitForSingleObject

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

请参阅here