作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如果应用程序崩溃,是否会调用析构函数?如果这是一个未处理的异常,我猜是这样,但是更严重的错误,或者诸如用户终止应用程序进程之类的错误呢?
还有一些潜在的愚蠢问题:
最佳答案
我鼓励您亲自尝试一下。例如:
using System;
class Program {
static void Main(string[] args) {
var t = new Test();
throw new Exception("kaboom");
}
}
class Test {
~Test() { Console.WriteLine("finalizer called"); }
}
在命令提示符下运行它,这样您就可以看到最后的喘息。首先注释掉 throw 语句。
与 Windows 中任何未处理的异常一样,Windows 提供的默认异常过滤器会调用 WerFault.exe 显示的 Windows 错误报告对话框。如果单击“关闭程序”,WerFault 将使用 TerminateProcess() 终止程序。这是一个快速结束,没有机会运行终结器线程,就像程序正常退出时会发生的那样。
然后 Windows 负责清理弹片。它会自动关闭您的程序可能已打开但没有机会在终结器中关闭的任何操作系统句柄。文件是这里比较棘手的问题,它们的缓冲区不会被刷新,你很容易在磁盘上得到一个部分写入的文件。
关于c# - 析构函数 - 如果应用程序崩溃,它会被调用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2514688/
我是一名优秀的程序员,十分优秀!