C#中的终止方案

时间:2009-12-15 14:10:30

标签: c# .net terminate

我希望在使用Windows TaskManager终止我的WinFormsApplication时执行一些代码(清理resoucrse)。我该怎么做?我正在使用TaskManager的Process选项卡终止我的应用程序。

5 个答案:

答案 0 :(得分:4)

将主表单中的ApplicationExit事件连接起来并在那里进行清理。

修改 如果您通过任务管理器关闭应用程序,则无法捕获任何事件。这些事件期待正常的终止过程。

答案 1 :(得分:4)

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

有两种可能性。第一种是安装一个监视应用程序的Windows服务应用程序,并确保在应用程序被终止时清理其资源。这需要一些进程间通信和相当多的编码。

第二是确保应用程序启动时资源清洁。运行时检查您的资源是否在那里,并在继续执行之前将其清理干净。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

根据其描述,CriticalFinalizerObject可能会对您有所帮助:

  

...公共语言运行时(CLR)   保证所有关键   终结代码将给出   执行的机会,提供   终结者遵循CER的规则,   即使在CLR的情况下   强行卸载应用程序域   或中止线程