我想在使用 Windows 任务管理器终止我的 WinFormsApplication 时执行一些代码(清除资源)。我该怎么做?我正在使用 TaskManager 的 Process 选项卡终止我的应用程序。
问问题
426 次
5 回答
4
从主窗体连接ApplicationExit事件并在那里进行清理。
编辑: 如果您通过任务管理器关闭应用程序,则没有可以捕获的事件。这些事件需要正常的终止过程。
于 2009-12-15T14:16:00.783 回答
4
如果您的应用程序被强制关闭,我不确定是否有可靠的方法来确保您清理资源。我假设您的资源是您而不是 Windows 管理的非标准资源。
有两种可能性。第一个是安装一个 Windows 服务应用程序,它监视您的应用程序并确保在您的应用程序被终止时清理其资源。这需要一些进程间通信和大量编码。
第二个是确保应用程序启动时资源是干净的。在运行时检查您的资源是否存在,并在继续执行之前清理它们。
于 2009-12-15T14:22:31.283 回答
2
在您的主应用程序窗口中处理此事件:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if(e.CloseReason == CloseReason.TaskManagerClosing) {
// clean up code
}
}
于 2009-12-15T14:13:16.013 回答
1
我不确定,也没有尝试过。但我的猜测是,它应该可以通过捕获一些 Win32 事件来实现。试试 WM_CLOSE、CTRL_CLOSE_EVENT
于 2009-12-15T14:37:14.250 回答
0
根据其描述,CriticalFinalizerObject 可能会对您有所帮助:
...公共语言运行时 (CLR) 保证所有关键的终结代码都有机会执行,前提是终结器遵循 CER 的规则,即使在 CLR 强制卸载应用程序域或中止线程的情况下
于 2009-12-15T15:12:04.833 回答