AFAIKtry
和finally
block 用于执行一段可能会抛出一些异常的代码,如果我们准备处理某种类型的异常和/或正在排除它们exception
,我们也会添加block,比如,或其他东西。但是当我运行这个..catch
FileIOException
AccessRight
private void button1_Click(object sender, EventArgs e)
{
try
{
Environment.FailFast("It failed");
}
finally
{
MessageBox.Show("Done");
}
}
它打破了一个例外并说
检测到 FatalExecutionEngineError
消息:运行时遇到致命错误。错误地址位于线程 0xd04 上的 0x032526f4。错误代码为 0x80131623。此错误可能是 CLR 中的错误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。
现在msdn说
通常,当未处理的异常结束应用程序时,finally 块是否运行并不重要。但是,如果即使在这种情况下也必须在 finally 块中运行语句,则一种解决方案是在 try-finally 语句中添加一个 catch 块。
所以,我添加了catch
块,但它仍然说同样的事情。
private void button1_Click(object sender, EventArgs e)
{
try
{
Environment.FailFast("It failed");
}
catch (Exception ex)
{
}
finally
{
MessageBox.Show("Done");
}
}
它再次失败并出现同样的错误。至于 CLR 说 finally 中的代码块总是运行(至少在添加 catch 时),肯定不是这样。评论/意见有人吗?
还有截图。。