代码改变世界

Response.Redirect 与 异常(线程正在中止)

2006-04-25 19:56  晓风残月  阅读(...)  评论(... 编辑 收藏

今天看到 现实会那么美? 中关于有关终止线程的一个问题,让我想起了Response.Redirect 也有类是的问题。

如果使用 try 、catch 处理包含Response.Redirect  语句代码,总是能捕捉到异常:线程正在中止,
其实不仅仅Response.Redirect 会,Response.End 和 Server.Transfer 也是一样的情况,本质的原因的原因是Response.End 方法停止页的执行,并将该执行变换到应用程序的事件管线中的 Application_EndRequest 事件, Response.End 后面的代码行将不执行。通常认为Response.End 方法是线程的非正常结束,因此MS就在内部抛出ThreadAbortException 异常,而Response.Redirect 和 Server.Transfer 这两种方法都在内部调用 Response.End。

关于 的解决方案见MS KB:

PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

http://support.microsoft.com/default.aspx?scid=kb;EN-US;312629

关于 为什么有些方法一定要抛出异常,有关终止线程的一个问题 这里有非常详细的讨论。^_^