ThreadAbortException有什么特别之处?

Roy*_*mir 2 c# asp.net .net-4.0

众所周知,Server.Transfer在执行会抛出ThreadAbortException.

此外,ThreadAbortException继承Exception:

在此输入图像描述

那么为什么异常不会进入catch块:

  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (Exception  e)
   { }
Run Code Online (Sandbox Code Playgroud)

它会在:

  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (ThreadAbortException e)
   { }
Run Code Online (Sandbox Code Playgroud)

编辑,

这适用于两种情况.我不知道它为什么以前没用.请忽略.

对不起误导.

Ric*_*ard 5

.NET运行时(命令语言基础结构,CLI,处理程序集执行的基础)对许多异常类型的处理方式不同.

例如.StackOverflowException不能被捕获在所有的.NET代码.

其原因取决于例外情况.在这种情况下,StackOverflowException因为CLI无法保证进程状态的正确性.

ThreadAbortException特殊处理的情况下,因为虽然它可以被捕获但必须重新抛出(自动),因此线程将结束.