Response.Redirect 正在中止线程解决方案_C#教程

这两天在开发调试过程中,老是会出现在一个 "正在中止线程“(ThreadAbortException)的例外信息。
例外是由 Response.Redirect 方法产生的,虽然知道是线程的问题, 但是不知为何 Redirect会出现这样的错误,以前是没有碰到过,转移到 Asp.net 2.0 开发就遇上了。
在狂Google了一下后,才发现MS早就发现了这个问题,但提供了解决方法。以下是主要信息的摘要:
症状
如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。
原因
Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件。不执行 Response.End 后面的代码行。

此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法均在内部调用 Response.End。
解决方案
要解决此问题,请使用下列方法之一:• 对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。
• 对于 Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如: Response.Redirect ("nextpage.aspx", false);

B-E-A-utiful! 就这么简单,问题解决了,感谢微软,感谢GOOGLE,感谢上帝!

现在把解决方法张贴出来,希望能帮助更多人解决开发过程中遇到的类似问题,将搜索进行到底!

时间: 2024-09-29 14:57:11

Response.Redirect 正在中止线程解决方案_C#教程的相关文章

C#设置子窗体在主窗体中居中显示解决方案_C#教程

问题的开始是由C#传传看主群里的印醒提出来的,下面我来说一下解决方案吧 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会这样写 在子窗体的Load事件中 这样写 复制代码 代码如下: this.StartPosition = FormStartPosition.CenterParent; 其实这样写是不对的,正确的写法应该是 复制代码 代码如下: this.StartPosition = FormStartPosition.CenterSc

c#.NET中日志信息写入Windows日志中解决方案_C#教程

1. 目的   应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.  在Windows2000及以上操作系统中,有一个Windows日志系统,它包括应用程序(Application)事件日志.系统(System)日志和安全(Security)日志,事件日志也可以是自定义日志.在.net Framework中也提供了相应的类和接口来使用应用程序事件日志或者自定义事件日志

Visual Studio 未能加载各种Package包的解决方案_C#教程

问题: 打开Visual Studio 的时候,总提示未能加载相应的Package包,有时候还无法打开项目,各种提示 解决方案: 进入用户目录 C:\Users\用户名\AppData\Local\Microsoft\VisualStudio\VS版本(12.0)\ComponentModelCache 该目录 删除 Microsoft.VisualStudio.Default.cache

c#.net多线程编程教学——线程同步_C#教程

随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问. 考虑一种我们经常遇到的情况:有一些全局变量和共享的类变量,我们需要从不同的线程来更新它们,可以通过使用System.Threading.Interlocked类完成这样的任务,它提供了原子的,非模块化的整数更新操作. 还有你可以使用System.Threading.Monitor类锁定对象的方法的一段代码,使其暂时不能被别的线程访问. System

C#如何将DataTable导出到Excel解决方案_C#教程

最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中. 下面是我项目当中Excel.cs这个类的全部代码,通过这个类可以很容易地将DataTable中的数据导入到Excel方法中. 首先,必须要下载NPOI.dll这个程序集, 类代码如下: 复制代码 代码如下: using System; using NPOI.HSSF; using NPOI.HPSF; using NPOI.HSSF.UserModel; usin

IIS出现 "正在中止线程" 错误

问题描述 C#代码,并且项目中没有用到Response.End.Response.Redirect或Server.Transfer方法.但是一定时间之后就有错误日志System.Threading.ThreadAbortException:正在中止线程.困扰了很久,还是没有头绪.哪位大虾指点一二. 解决方案 解决方案二:是不是线程数过多或者是代码里有什么地方触发终止线程了解决方案三:中止线程错误和你写的代码都没关系,就是有其他运行时错误了.解决方案四:引用1楼Kz_Mm的回复: 是不是线程数过多

Response.Redirect提示未将对象引用设置到对象的实例。

问题描述 Response.Redirect("login.aspx",true);提示未将对象引用设置到对象的实例.想问问什么情况下Response为空?Response已经为空了,要怎么跳转? 解决方案 解决方案二:login.aspx这里面的代码错了吧.你请求打开login.aspx界面出现未将对象.在login.aspx代码设置个断点解决方案三:login.aspx页面和当前的跳转页面是同级关系吗?解决方案四:PageLoad的时候Response才有值解决方案五:你这个代码是

Response.redirect实现页面重定向

redirect|response|页面 用 Redirect 方法可将浏览器重定向到另一个 URL,而不是将内容发送给用户.例如,如果您想确认用户是否已从主页进入了您的应用程序,以便能收到一个客户 ID,则可以检验他们是否有客户 ID 号:如果没有,就可以将其重定向到主页.以下就是具体例子:<%If Session("CustomerID") = 0 Then Response.Redirect "homepage.asp" End If%> 除非缓冲

asp.net在使用Response.Redirect try{}catch{}块失效

try { - Response.Redirect("/mymaimai.aspx"); - } catch (Exception e) { // 异常处理 } 使用以上语句,不管是否有异常,都会执行catch中的,一直显示""失败"",都会抛出 System.Threading.ThreadAbortException,原因如下: Response.End 方法停止页的执行,并将该执行变换到应用程序的事件管线中的 Application_End