好的,这是一个有点奇怪的问题,我希望有人能够解决。我有以下代码:
static void Main(string[] args)
{
try
{
Console.WriteLine("in try");
throw new EncoderFallbackException();
}
catch (Exception)
{
Console.WriteLine("in Catch");
throw new AbandonedMutexException();
}
finally
{
Console.WriteLine("in Finally");
Console.ReadLine();
}
}
现在当我将其编译为目标3.5(2.0 CLR)时,它会弹出一个窗口显示“XXX已停止工作”。如果我现在点击取消按钮,它将运行finally
,如果我等待它完成查找并点击关闭程序按钮,它也将运行finally
。
现在有趣且令人困惑的是,如果我使用4.0进行相同的操作,点击取消按钮将运行finally
块,而点击关闭程序按钮则不会。
我的问题是:为什么在点击关闭程序按钮时,2.0版本会运行finally
,而4.0版本不会?这会带来什么后果?
编辑:我在Windows 7 32位上以发布模式(内置发布模式)从命令提示符中运行此代码。错误消息:第一个结果是在3.5上运行,关闭程序后Windows查找问题,第二个结果是在4.0上运行并执行相同操作。