没脾气2x:
.NET,Response.Redirect 会产生 ThreadAbortException 异常
[阅读: 867] 2005-01-26 03:59:31
http://notemper2x.cndev.org/archive/2005/01/26/5884.aspx
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);
}
}
Notemper2x 3.1 ( ̄ε( ̄#)
没脾气2x 之 个人综合篇:
http://notemper2x.cndev.org/
我的 panoramio 相册:
http://panoramio.com/user/zhaixudong
我的 flickr相册:
http://www.flickr.com/photos/notemper2x/


QQ号20250出售,售价400,000元整(5位、皇冠80级、VIP7)a