System.Threading.ThreadAbortException: 正在中止线程。
在 System.Threading.ThreadAbortException 中第一次偶然出现的“mscorlib.dll”类型的异常
“System.Threading.ThreadAbortException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
但不影响程序的正常运行。于是在网上查了查,发现相关资料不多。后来找到微软的官方解释,搞定。
--------------------------------------------------------------------------------------------------------------
症状
如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,则出现 ThreadAbortException 异常。 可使用 try-catch 语句捕捉此异常。
原因
Response.End 方法停止页的执行,并将该执行变换到应用程序的事件管线中的 Application_EndRequest 事件。 Response.End 后面的代码行将不执行。
此问题出现在 Response.Redirect 和 Server.Transfer 方法中,这是由于这两种方法都在内部调用 Response.End。
解决方案
若要解决此问题,请使用下列方法之一:
- 对于 Response.End,调用 ApplicationInstance.CompleteRequest 方法而不调用 Response.End,以便跳过 Application_EndRequest事件的代码执行。
- 对于 Response.Redirect,使用重载 Response.Redirect(String url, bool endResponse),对 endResponse 参数它传递 false以取消对 Response.End 的内部调用。例如:
Response.Redirect ("nextpage.aspx", false);如果使用这种解决方法,Response.Redirect 后面的代码将得到执行。
- 对于 Server.Transfer,请改用 Server.Execute 方法。
状态
这种现象是设计使然。
又有问题出现了:
在try catch中使用Response.End()抛"线程被中止"异常,Response.Redirect()和Server.Transfer()也会出现这个问题.
如:(

try
{
if (DoSomeThing())
{
Response.End();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
}
//DoOtherThing不写在else里只是为了说明问题
DoOtherThing();
}
catch (System.Threading.ThreadAbortException ex)
{
WirteLog(ex);
}
catch (Exception ex)
{
WirteLog(ex);
}
)
如果不用catch (System.Threading.ThreadAbortException ex),就会抛"线程被中止"异常,
如果不用catch (System.Threading.ThreadAbortException ex),而用HttpContext.Current.ApplicationInstance.CompleteRequest 代替Response.End(),则后面的DoOtherThing()还是会继续执行.
要根据实际需要选择具体做法.
最终解决办法:
(1)、在页面的OnLoad或OnInit中可以使用HttpContext.Current.ApplicationInstance.CompleteRequest()+return来代替Response.End;
(2)、用 Response.Redirect(strUrl,false)+return 来代替 Response.Redirect(strUrl)
(3)、Server.Execute根本代替不了Server.Transfer方法,Server.Execute会将两个页面的代码全部输出。
特别return注意:return语句退出本语句所在的方法,而不能退出子类的方法!千万不要以为在基类页面的OnLoad中检测到了某object==null时就能return此次请求,子类页面的OnLoad就无需检测此object!=null可照用!
做这个网站需要下载软件 可我有不想让 迅雷等工具 下载影响网速.
就做了个限制程序!
可就出现了错误 ! 正在中止线程
程序大致如下:
- try
- {
- sting host = context.Request.UrlReferrer.Host;
- if ( 程序判断)
- {
- context.Response.Clear();
- context.Response.ContentType = "application/octet-stream";
- context.Response.WriteFile(file.FullName);
- context.Response.End();
- }
- }
- catch (Exception e)
- {
- HttpContext.Current.Response.Redirect("/default.aspx?key=" + e.Message);
- context.Response.End();
- }
- try
- {
- sting host = context.Request.UrlReferrer.Host;
- if ( 程序判断)
- {
- context.Response.Clear();
- context.Response.ContentType = "application/octet-stream";
- context.Response.WriteFile(file.FullName);
- context.Response.End();
- }
- }
- catch (Exception e)
- {
- HttpContext.Current.Response.Redirect("/default.aspx?key=" + e.Message);
- context.Response.End();
- }
只有 一执行 Try 里面的东西 就一定出错 e.Message=正在中止线程
研究了一下好像是 Try 执行的时候 context.Response.End(); 就出错
不能把context.Response.End();放在 Try 里面
需要写成:
- try
- {
- sting host = context.Request.UrlReferrer.Host;
- }
- catch (Exception e)
- {
- HttpContext.Current.Response.Redirect("/default.aspx?key=" + e.Message);
- context.Response.End();
- }
- if ( 程序判断)
- {
- context.Response.Clear();
- context.Response.ContentType = "application/octet-stream";
- context.Response.WriteFile(file.FullName);
- context.Response.End();
- }
System.Threading.ThreadAbortException: 正在中止线程。的更多相关文章
- C#错误之 System.Threading.ThreadAbortException:正在中止线程
参考:http://www.cnblogs.com/chendaoyin/archive/2013/06/27/3159211.html 1.开启一个子线程 //开启一个子线程,子线程调用方法 Met ...
- C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程
C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程 这是由ThreadAbortException抛出的 可以写成下面的样子 tr ...
- 【异常记录(九)】 System.Threading.ThreadAbortException: 正在中止线程
报错如下: System.Threading.ThreadAbortException: Thread was being aborted. at System.Threading.Thread.Ab ...
- System.Threading.ThreadAbortException: 正在中止线程
症状 如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常.您可以使用 try-ca ...
- “System.Threading.ThreadAbortException”类型的第一次机会异常在 mscorlib.dll 中发
问题原因: Thread.Abort 方法 .NET Framework 4 其他版本 1(共 1)对本文的评价是有帮助 - 评价此主题 在调用此方法的线程上引发 ThreadAbortExce ...
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。System.Threading.ThreadAbortException
第一次遇到这样的错误 错误语法 try{ Response.Redirect("aa.aspx"); }catch (Exception ex){ Response.Redirec ...
- ASP.NET: 正在中止线程 错误原及解决方法
#[操作记录]:2010-02-23 9:25:12 System.Threading.ThreadAbortException: 正在中止线程. 症状 如果使用 Response.End.Resp ...
- 【转】ASP.NET"正在中止线程"错误原因
最近做的系统中老出现的一些问题不太明白,在使用 Response.End.Response.Redirect 或 Server.Transfer 时出现 ThreadAbortException , ...
- 异常System.Threading.Thread.AbortInternal
异常信息: System.Threading.ThreadAbortException: 正在中止线程. 在 System.Threading.Thread.AbortInternal() 在 Sys ...
随机推荐
- 建置 POSTFIX 服务器
建置 POSTFIX 服务器 postfix 是除了 sendmail 以外 ,最被广泛采用的 Linux 邮件服务器,一般使用的观感不外乎两点: 一.安全:垃圾信过滤机制较聪明,就算什么都没设定,也 ...
- 7、网页制作Dreamweaver(悬浮动态分层导航)
悬浮动态分层导航的制作: 1.首先在<head>里面引用一个JQUERY的文件以用来制作鼠标点击动画效果(从网站上下载即可) <script language="javas ...
- C#静态类和静态成员
1. 静态类 1.1 简介 静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数. 静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化. ...
- explicit用法
explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things { ...
- latex figure \label 放在\caption 后
http://www.cnblogs.com/loca/p/4264686.html latex figure \label 放在\caption 后,否则将显示\section 或者\subsect ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- Java 有理数类 分数类 Rational类的设计与实现
要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等. package chapter14; public class Rational e ...
- hadoop问题锦集(一)-搭建集群环境时的常见问题
1.没有主机的路由 1.namenode与datanode之间ping不通了 2.防火墙得关闭: ufw status ufw disabled 2. ssh localhost ssh:connec ...
- 检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
在将应用程序从经典模式迁移到集成模式时,可以保留经典模式下的自定义模块和处理程序注册,也可以将这些注册移除.如果不移除经典模式下使用的 httpModules 和 httpHandlers 注册,则必 ...
- 使用Dnsmasq搭建本地dns服务器上网
导读 搭建一个属于自己的本地DNS服务器很有必要,利用Dnsmasq来搭建一个属于自己的本地DNS服务器,享受更干净无污染.更智能快速和没有广告干扰的DNS解析服务. 一.Dnsmasq安装 安装并启 ...