【发布时间】:2009-12-16 00:41:53
【问题描述】:
我想在使用 Windows 任务管理器终止我的 WinFormsApplication 时执行一些代码(清除资源)。我该怎么做?我正在使用 TaskManager 的进程选项卡终止我的应用程序。
【问题讨论】:
我想在使用 Windows 任务管理器终止我的 WinFormsApplication 时执行一些代码(清除资源)。我该怎么做?我正在使用 TaskManager 的进程选项卡终止我的应用程序。
【问题讨论】:
如果您的应用程序被强制关闭,我不确定是否有可靠的方法来确保您清理资源。我假设您的资源是您而非 Windows 管理的非标准资源。
有两种可能。第一个是安装一个 Windows 服务应用程序,它监视您的应用程序并确保在您的应用程序被终止时清理其资源。这需要一些进程间通信和大量编码。
第二个是确保应用程序启动时资源是干净的。在运行时检查您的资源是否存在,并在继续执行之前清理它们。
【讨论】:
从您的主窗体连接ApplicationExit 事件并在那里进行清理。
编辑: 如果您通过任务管理器关闭应用程序,则无法捕获任何事件。这些事件需要正常的终止过程。
【讨论】:
在您的主应用窗口中处理此事件:
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 强制卸载应用程序域 或中止线程
【讨论】: