2012-02-22 141 views
1

想象一下,启动一个进程或启动一个应用程序,然而在任务管理器中杀死这个进程。是否有事件关联?杀死进程事件

此代码,取消用户关闭窗口申请

private void Form1_Aplicacao_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing) 
     e.Cancel = false; 
} 

但是,如果我使用process.Kill()方法的FormClosing事件还没有被解雇。 我的问题:有一个事件来杀死这个自己的过程?

+0

HTTP的可能重复:// stackoverflow.com/questions/3326242/c-sharp-windows-form-killed-by-task-manager-is-there-a-way-to-run-shutdown-fun – arunes 2012-02-22 14:53:38

+0

我不相信你会发现一个事件当应用程序以这种方式突然终止时。 – 2012-02-22 14:53:57

回答

1

简短回答:不,应用程序无法知道(例如引发了一个事件)它的主机进程已被残忍地杀死。

3

进程死亡时不会引发事件。最有可能的是,当进程从调度程序的可运行任务列表中删除时,它的内存被释放,然后操作系统在之后拾取剩余的任何部分。我绝对不会依赖运行的析构函数或垃圾收集,所以任何正在使用的操作系统无法清理的资源都将被泄漏。 (实际上)杀死一个过程意味着你杀死它,把它切碎,磨碎,然后把碎片扔进海里。更具体地说,不会跳入杀死进程的代码,因此在代码中不会发生事件。请记住,像许多其他流控制构造(循环,条件等)以及多任务本身一样,事件只是幻想的gotos。非常有用的花式gotos,但仍然简单地跳转到可用代码的不同部分。

0

这不是正确的。 您可以使用过程通信技术,如PIPES。

您可以发送投掷PIPES并等待回答。 您可以创建一个规则,如果在X时间内没有收到答案,则该过程已被终止。

但这在过程通信选项,以获取更多信息,您可以通过以下链接查询只有一个:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

也期待在以下几个选项: C# process.start, how do I know if the process ended?