Vor*_*t3x 3 .net c# destructor application-state crash-dumps
我是c#编程的新手,所以请记住:
我有一个内存数据对象,我需要在我的应用程序崩溃或关闭时保存信息.有没有办法确定性地或可靠地做到这一点?
我一直在寻找析构函数
~MyObjectName(){}
Run Code Online (Sandbox Code Playgroud)
终结者和Dispose(),
但据我所知,这些都不能可靠地做到我想要的吗?
目前我正在使用析构函数,它在我关闭程序时起作用,但这并不意味着它将在崩溃或总是工作.
我也应该看一下这些活动吗?
有没有,你可以用它来保存数据(或为此事做任何事情),当一个进程(任何过程,而不仅仅是一个.net程序)结束100%可靠的机制-大多数进程可以在任何时候使用"终止任务管理器中的"结束进程"选项,当发生这种情况时,该进程立即被终止.作为一个更极端的例子,电源线可以从机器的后部拉出.
如果该数据对象不是100%必需是最新的并且在进程被终止后保存,那么AppDomain.UnhandledException事件就足够了.
如果绝对100%必要,那么您需要在流程运行时不断保存这些信息 - 绝对没有保证您将有机会在以后这样做.这是数据库如何操作,直到某些格式的某些记录(例如事务日志)将更改记录记录到磁盘之后才会返回事务.这就是D代表ACID的内容.
我相信你正在寻找未处理的异常?这样的事情:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, "Unhandled Thread Exception");
// here you can log the exception ...
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show((e.ExceptionObject as Exception).Message, "Unhandled UI Exception");
// here you can log the exception ...
}
Run Code Online (Sandbox Code Playgroud)
此示例显示如何管理try-catch部分中未捕获的所有异常(在Windows窗体应用程序中).
UnhandledException事件处理从主UI线程抛出的未捕获异常.ThreadException事件处理从非UI线程抛出的未捕获异常.
| 归档时间: |
|
| 查看次数: |
2075 次 |
| 最近记录: |