2009-12-22 34 views
1

我想在控制台应用程序关闭时保存最终状态的数据。我已经想出了如何使用序列化来保存数据,但不知道如何在应用程序关闭时做到这一点。如何执行关闭C#控制台应用程序的操作?

一种方法是设置非托管处理程序来拦截关闭命令并执行操作,但是一旦调用了事件处理程序,GC()已经运行并且托管程序不再存在于内存中。

任何想法?


编辑: 这里的关键问题是,我有一个用于侦听程序的生命流的对象。如果程序然后在外部关闭(例如通过在角落中按压x),则不执行Main()方法中的其他代码,绕过关闭序列化代码。

+0

终结器是否运行?也许有可能有某种'根'的对象。 – leppie 2009-12-22 17:08:12

回答

4

通常情况下,您只需将此代码放在Main例程的末尾 - 这将是在控制台应用程序关闭之前运行的最后一件事。

如果您试图在托管代码关闭之前的最后时刻处理某些事情,则可以订阅AppDomain.DomainUnload。这个事件在AppDomain被卸载的时候被激发。

1

我会创建一个应用程序生命期的类实例来存储状态,并将序列化代码添加到其析构函数中。

另一个想法是在程序中使用try {} finally {}。

相关问题