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