17
|
Christopher Currens · 技术社区 · 12 年前 |
![]() |
1
8
.NET中的异常处理有三个不同的阶段:
因此,代码片段中的一个核心要求是范围中有一个catch(CryptographicException)。如果没有它,阶段1将失败,CLR也不知道如何恢复执行。线程已死,通常还会根据异常处理策略终止程序。finally块都不会执行。 如果在第2阶段,finally块抛出异常,那么正常的异常处理序列将立即中断。最初的例外是“丢失”,它从未进入第3阶段,因此在您的程序中无法观察到。异常处理从第1阶段开始,现在查找新的异常并从finally块的范围开始。 |
![]() |
2
6
基本上,执行时会发生什么:
这正是基于您引用的C#语言规范所发生的事情。第一个例外(
您只能通过显式使用
这基本上在中的规范中进行了详细解释
第一个例外,在您的情况下
|
![]() |
3
2
事实证明,我 不 疯子根据我对这个问题的回答,我认为我似乎很难理解规范中如此清晰地概述了什么。这真的一点也不难理解。 事实是,规范是有道理的,而行为则不然。当您在较旧的运行时中运行代码时,情况更是如此 彻底地 不同的或者至少 出现 到 简要回顾我在x64 Win7机器上看到的:
事实证明,几乎任何试图回答我的问题的人都会得到与我完全相同的结果,所以这就解释了为什么没有人能回答我为什么运行时会因其吞下的异常而终止的问题。 这从来都不是你所期望的谁会怀疑 实时调试器 ? 您可能已经注意到,在.NET 2下运行应用程序会产生与.NET 4不同的错误对话框。然而,如果你和我一样,在开发周期中你已经开始期待这个窗口,所以你什么都没想。
vsjitdebugger可执行文件强制终止了应用程序,而不是让它继续。在2.0运行时中,
由于jit调试器终止了应用程序 似乎 就像它不符合规范所说的,而事实上,它符合规范。
为了测试这一点,我通过更改位于
事实证明,有一个解决方法,尽管实际上没有理由解决这种行为,因为您的应用程序正在终止。
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |