关于“正在中止线程”异常的部分解决方案(一)

来源:互联网 发布:安广网络潘集分公司 编辑:程序博客网 时间:2024/05/16 03:14

出现“正在中止线程”异常通常都是由于以下三种原因导致引起,给出解决方案如下:

解决方案:

1、针对Response.End,调用 HttpContext.Current.ApplicationInstance.completeRequest 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。 

2、针对Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如: Response.Redirect ("nextpage.aspx", false); 如果使用此替代方法,将执行 Response.Redirect 后面的代码。 

3、针对Server.Transfer,请改用 Server.Execute 方法。

另解(源自网络):

如果是方法1在IIS 5.5下只要删除就OK了,不过在IIS 6.0和7.0 下又会报出另外一个错误“与远程主机通信时发生错误。错误代码是 0x8007xxxx。”在网上翻查了一翻资料后,终于找到了解决方法:就是将Response.End();换成Response.Close();帮助对Response.Close()的解释是关闭到客户端的连接而Response.End()的解释是停止该页的执行,并引发Application_EndRequest。也就说用Response.End()程序就直接停止后面的工作了转而触发Application_EndRequest,那么当程序在后面还有代码需要运行时,程序就会抛出ThreadAbortException的异常。还有需要了解的就是End方法在不抛出异常时还会调用flush的方法。接着来,Response.Close()方法是关闭了连接,也就说程序顺利执行完了所有代码后关闭了连接。对于只运行Flush()后报出的“与远程主机通信时发生错误”,我的理解是当执行了Flush()后在底层马上开始向客户端发送数据,但是Flush()貌似只能指示程序开始连接发送,却没有停止关闭的标识,导致程序报出异常。当然这是在IIS 7.0下会出错(可能在IIS 7.0 开始在调用Flush()后需要显示关闭socket连接)。所以以后再在用完Flush()后最好加上Close()。就像数据库连接一样,用完就关闭连接。


0 0