繁体   English   中英

C#中的终止方案

[英]Termination scenario in C#

我想在使用Windows TaskManager终止WinFormsApplication时执行一些代码(清理资源)。 我该怎么做? 我正在使用TaskManager的“进程”选项卡终止应用程序。

从主窗体中连接ApplicationExit事件,并在那里进行清理。

编辑:如果要通过任务管理器关闭应用程序,则没有可以捕获的事件。 这些事件预期正常的终止过程。

如果您的应用程序被强制关闭,我不确定是否有可靠的方法来确保清理资源。 我假设您的资源是您(而不是Windows)管理的非标准资源。

有两种可能性。 第一种是安装Windows服务应用程序,该应用程序监视您的应用程序,并确保在杀死应用程序时清理其资源。 这需要一些进程间的通信和大量的编码。

第二个是确保在应用程序启动时资源是干净的。 运行时请检查您的资源是否闲逛,并在继续执行之前清理它们。

在主应用程序窗口中处理此事件:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    if(e.CloseReason == CloseReason.TaskManagerClosing) {
        // clean up code
    }
}

我不确定,也没有尝试过。 但是我的猜测是,应该可以通过捕获一些Win32事件来实现。 尝试WM_CLOSE,CTRL_CLOSE_EVENT

CriticalFinalizerObject可能会根据其描述为您提供帮助:

...公共语言运行库(CLR)保证所有关键的定稿代码都将有机会执行,前提是定稿程序遵循CER规则,即使在CLR强制卸载应用程序域或中止线程的情况下

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM