众所周知,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/

10-10 05:05