我有以下简单的代码:
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操作 系统维护,直到它完全释放该句柄。
所以即使退出应用程序,似乎也可以检测到该事件!
答案 0 :(得分:1)
由于所有评论都表明您无法在同一个应用程序中处理应用程序的Exited
(已退出意味着它已经发生,因此不再需要执行用户代码)
但是,有一些方法可以在控制台应用程序as suggested here中处理此问题。