try
{
Response.Redirect("otherpage.aspx");
}.NET Document 说 ThreadAbortException 是一个特殊的异常,在线程处理时我们要用它来判断截获线程中止的消息。Response.Redirect 也会引发这个异常,似乎是引发异常以终止当前页面的执行线程。由于是“特殊的异常”,一些常见的 catch 操作似乎并不能发现它:
catch(Exception ex)
{
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
catch(Exception ex)
{
Response.Write(ex.Message);
System.Threading.Thread.ResetAbort(); // 这也不能结束这个 Response.Redirect 产生的“特殊异常”
}
下面的用法,将能看到它:
catch(Exception ex)
{
Response.Redirect("error.aspx?message=" + ex.Message);
}如果我们在 catch 中使用了 Response.Redirect 的话,他将会影响 try 中的 Response.Redirect,暂时先不考虑在 try 中以及在 catch 中使用 Response.Redirect 是否得当的问题。目前的解决方法是:
catch(Exception ex)
{
if (!(ex is ThreadAbortException))
{
Response.Redirect("error.aspx?message=" + ex.Message);
}
}由此考虑,Response.End() 应该也会引发 ThreadAbortException 异常的。

2005年06月20日 16:32 沙发
果然如此,谢过了!
2006年02月17日 11:38 板凳
ex is ThreadAbortException