众所周知,Server.Transfer在执行时抛出ThreadAbortException。
另外,ThreadAbortException继承Exception:
那么为什么异常不会在以下位置进入catch块:
try
{
Server.Transfer("NoPremissionSell.aspx");
}
catch (Exception e)
{ }
虽然它将在:
try
{
Server.Transfer("NoPremissionSell.aspx");
}
catch (ThreadAbortException e)
{ }
编辑,
这在两种情况下均有效。我不知道为什么以前没用。
请忽略。
很抱歉误导您。
最佳答案
.NET运行时(作为程序集执行基础的命令语言基础结构CLI)对许多异常类型的处理方式有所不同。
例如。 .aa代码根本无法捕获StackOverflowException
。
其原因取决于异常。对于StackOverflowException
,因为CLI不能保证进程状态的正确性。
在ThreadAbortException
情况下,特殊处理是因为尽管可以捕获它,但必须将其重新抛出(自动),以便线程结束。
关于c# - ThreadAbortException有什么特别之处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12349287/