Ara*_*yan 6 c# exception-handling windows-error-reporting
考虑一下我们有这段代码:
static void Main(string[] args)
{
try
{
throw new Exception("Exception");
}
catch
{
throw;
}
finally
{
Console.WriteLine("------finally-----");
}
}
Run Code Online (Sandbox Code Playgroud)
我们有未处理的异常和finally阻止.
werfault启用后,当我Cancel尝试"自动解决问题"时按下,最后执行块.
但是,如果我没有按下Cancel并在下一个窗口中单击Close The Program finally块不执行.
最后当我禁用werfault并点击Close Program finally块执行时.
我没有在c#规范中找到描述这种情况的任何文档.我也发现了这个MSDN:
在未处理的错误之后执行finally块取决于如何触发异常展开操作.
但没有解释,任何人都可以描述为什么会这样?
更新1:我已在.Net Framework 4.5.1和4.5.2中测试过它.
WerFault.exe 由于未处理的异常而立即终止并终止 .NET进程WerFault,但是当您禁用Microsoft .NET 错误报告时,会以某种方式关闭应用程序,以便该finally块仍会执行并且不会终止进程。
WerFault.exe检查是否立即终止进程的最佳方法是Event Viewer( Description: The process was terminated due to an unhandled exception.)。
Run Code Online (Sandbox Code Playgroud)Application: ConsoleApplication3.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.Exception Stack: at ConsoleApplication3.Program.Main(System.String[])