`
风火山林
  • 浏览: 147178 次
  • 性别: Icon_minigender_1
  • 来自: 汕尾
最近访客 更多访客>>
社区版块
存档分类
最新评论

出现“正在中止线程”的错误原因

 
阅读更多

本质上这不是一个错误。

当我们在try-catch中加入 Response.End 或者 Response.Redirect时会将捕获到ThreadAbortException 异常。

症状

如果使用 Response.EndResponse.RedirectServer.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。

原因

Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件。不执行 Response.End 后面的代码行。

此问题出现在 Response.RedirectServer.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);
如果使用此替代方法,将执行 Response.Redirect 后面的代码。
分享到:
评论

相关推荐

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

    这两天在开发调试过程中,老是会出现在一个 “正在中止线程“(ThreadAbortException)的例外信息。 例外是由 Response.Redirect 方法产生的,虽然知道是线程的问题, 但是不知为何 Redirect会出现这样的错误,以前是...

    c# 多线程任务中结束全部线程

    然而,在某些情况下,我们可能需要终止正在运行的所有线程,这通常发生在应用程序需要关闭或者某个关键错误发生时。在给定的代码片段中,虽然存在一些乱码字符,但我们可以从中抽取出与多线程相关的知识点,包括如何...

    易语言多线程模块

    有时我们需要提前结束某个线程的执行,比如当线程完成了特定任务或出现错误。易语言提供了一套机制来安全地中止线程。这通常涉及到设置线程的退出状态、发送线程终止信号,并确保线程的所有资源得到释放。需要注意的...

    多线程编程指南

    **取消线程**:线程取消是一种机制,允许在运行时中止线程的执行,这对于响应用户请求或系统事件至关重要。 **启用或禁用取消功能**:线程取消可以是异步的或同步的,开发者可以根据需要选择合适的取消模式。 **...

    关于c++ 多线程入门的文档

    线程安全指的是一个函数在多线程环境下正确运行的能力,不会因为线程的并发执行而导致错误。非线程安全的代码可能会导致数据损坏、死锁或竞态条件。因此,编写多线程代码时,应尽量避免全局变量,除非使用互斥锁或...

    Java如何中断一个正在运行的线程

    Java中的线程中断是指在某个线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。这种操作可能会使线程死亡、等待新的任务或是继续运行至下一步。中断线程需要注意一些细微的难题,如果没有被恰当的...

    c# 多线程有用的资料

    3. **任务取消**:支持正常取消后台工作,同时也可强制中止线程。 4. **异常处理**:捕获取消、强制中止和方法错误三种情况,并触发相关事件,便于释放资源。 5. **UI安全访问**:异步调用确保在工作方法中安全地...

    c#常见错误处理的几种方法

    例如,尝试中止线程时,会引发 ThreadAbortException。 39. TypeInitializationException TypeInitializationException 发生作为由类初始值设定时的异常。例如,尝试初始化无效的类时,会引发 ...

    多线程断点续传

    当文件传输因为网络中断、电源问题或用户主动暂停等原因中止时,系统会记录当前已传输的部分(即“断点”),下次重新开始传输时,可以从这个断点继续,避免了重复传输已经完成的部分。 结合多线程和断点续传,我们...

    VISA错误代码[参考].pdf

    然而,在使用VISA时,可能会遇到各种错误代码,这些错误代码可能是由仪器设备、网络连接、驱动程序或操作系统等原因引起的。 本文将详细介绍VISA错误代码的含义和解决方法,以帮助开发者更好地理解和解决VISA相关的...

    Delphi错误提示中英文对照

    - **解释**:此错误出现在使用GOTO语句时,如果GOTO语句跨越了TRY...EXCEPT...FINALLY...END结构,将会触发此错误。 6. **`clause expected, but found`** - **中文说明**:期望子句,但出现了其他内容。 - **...

    运行时异常与一般异常的区别?

    也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序中止。 在实际开发中,我们经常需要对异常进行捕捉和处理,以便提高程序的鲁棒性和可靠性。因此,了解运行时异常与...

    PLSQL Developer

    而且,该多线程IDE还意味着出现编程错误时不会中止:您在任何时间都可以中断执行或保存您的工作。 易于安装  不同于SQL*Net,无需中间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用...

    Quartz调度、终止执行的任务

    当我们需要终止某个正在运行的任务时,了解如何在Quartz中操作是至关重要的。 首先,让我们详细讲解一下Quartz的基础知识。Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是实际要...

    C# threading

    3. **调试困难**:多线程环境下的错误调试更加困难。 #### 五、创建和启动线程 在C#中,可以通过`System.Threading.Thread`类来创建线程。创建线程的基本步骤如下: 1. 定义一个方法作为线程的入口点。 2. 创建一个...

    一种将顺序程序划分为多个推测线程的以数据结构为中心的方法和执行模型

    若发生冲突,冲突检测机制会捕获这些冲突,触发冲突的线程将被中止,并丢弃它们的副作用。这样做可以确保程序的正确性。如果并行执行的线程没有发生冲突,那么这些线程的结果将被提交,从而确保了程序的正确性。 2....

    Windows 系统错误代码简单分析

     0057 网络适配器出现错误。  0058 指定的服务器无法执行所请求的操作。  0059 网络出现意外错误。  0060 远程适配器不兼容。  0061 打印机队列已满。  0062 服务器上没有存储等待打印的文件的空间...

    中止javascript执行的方法

    在JavaScript编程中,由于其单线程的特性,中止执行并不像其他语言(如PHP或Java)那样可以通过简单的返回语句或者退出函数来实现。JavaScript没有提供类似于`exit`或`return`这样的直接手段来中断脚本的执行。本文...

    pl/sql developer 9 + 注册机

    而且,该多线程IDE还意味着出现编程错误时不会中止:您在任何时间都可以中断执行或保存您的工作。 易于安装  不同于SQL*Net,无需中间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用...

    Windows 进程终止的消息标识符

    - **应用场景**:某个资源或同步对象被其他线程或进程释放或放弃,当前线程尝试访问时会返回此类标识符。 4. **STATUS_USER_APC (0x000000C0)** - **描述**:在给定的时间间隔过期之前,交付了用户模式APC。 - *...

Global site tag (gtag.js) - Google Analytics