永远不会引发Process.Exited事件

时间:2018-01-28 17:18:58

标签: c# process

我有以下简单的代码:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Process pr = Process.GetCurrentProcess();
            pr.EnableRaisingEvents = true;
            pr.Exited += HandleClosed;
            Console.ReadKey();

        }

        private static void HandleClosed(object sender, EventArgs e)
        {

            File.Create(@"C:\MYDIR\myfile.c");
        }
    }
}

当控制台应用退出时,我想创建HandleClosed事件中指定的文件。但是,即使我将Exited指定为EnableRaisingEvents,也不会引发事件true。 有什么建议吗?

P.S。 MSDN说:

  

退出事件表示相关进程已退出。这个   发生意味着过程终止(中止)或   成功关闭。只有在值的情况下才会发生此事件   EnableRaisingEvents属性为true。

     

关联过程有两种方式得到通知   退出:同步和异步。同步通知   表示调用WaitForExit方法来阻塞当前线程,直到   过程退出。异步通知使用Exited事件,   这允许调用线程在此期间继续执行。   在后一种情况下,必须将EnableRaisingEvents设置为true   调用应用程序以接收退出事件。

     

当操作系统关闭进程时,它会通知所有其他进程   已为已退出事件注册处理程序的进程。在这   时间,刚退出的进程的句柄可用于访问   一些属性,如ExitTime和HasExited操作   系统维护,直到它完全释放该句柄。

所以即使退出应用程序,似乎也可以检测到该事件!

1 个答案:

答案 0 :(得分:1)

由于所有评论都表明您无法在同一个应用程序中处理应用程序的Exited已退出意味着它已经发生,因此不再需要执行用户代码)

但是,有一些方法可以在控制台应用程序as suggested here中处理此问题。