如我们所知,Server.Transfer在执行时抛出ThreadAbortException。
此外,ThreadAbortException继承了异常:

那么,为什么异常不会进入catch块:
try
{
Server.Transfer("NoPremissionSell.aspx");
}
catch (Exception e)
{ }虽然它将在:
try
{
Server.Transfer("NoPremissionSell.aspx");
}
catch (ThreadAbortException e)
{ }编辑,
这在这两种情况下都是可行的。我不知道为什么它以前不起作用。请置之不理。
抱歉误导你。
发布于 2012-09-10 10:01:20
.NET运行时(作为程序集执行基础的命令语言基础结构,CLI )对许多异常类型有不同的对待。
例如:StackOverflowException根本无法被.NET代码捕获。
其原因取决于例外情况。在StackOverflowException的情况下,因为CLI不能保证进程状态的正确性。
在ThreadAbortException的情况下,特殊处理是因为当它被捕获时,它必须被重新抛出(自动),这样线程就会结束。
发布于 2012-09-10 10:01:23
ThreadAbortException在这方面是特别的,即使它被捕获,它也会自动被重新抛出。线程已中止。代码可以清除,但除非调用Thread.ResetAbort,否则不能停止中止。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx。
发布于 2012-09-10 10:08:41
不能通过catch (异常)捕获ThreadAbortException是不正确的。
下面的代码打印“已处理的异常:线程被中止”,证明异常确实被捕获:
using System;
using System.Threading;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
try
{
test();
}
catch (Exception ex)
{
Console.WriteLine("Handled Exception: " + ex.Message);
}
}
static void test()
{
Thread.CurrentThread.Abort();
}
}
}你是如何测试异常是否被捕获的?
https://stackoverflow.com/questions/12349287
复制相似问题