`

如果使用 Response.End,Response.Redirect 或 Server.Transfer,ThreadAbortException 发生

阅读更多

症状:

如果您使用Response.End/u3001 Response.RedirectServer.Transfer方法,将引发ThreadAbortException 异常/u3002您可以使用try-catch语句可以捕捉此异常。

 

原因:

Response.End方法结束执行页,并将执行切换到应用程序的事件管道中的Application_EndRequest事件。Response.End之后的代码行不会被执行。

因为这两种方法都会内部调用Response.EndResponse.RedirectServer.Transfer方法中发生此问题。

 

解决方案:

若要变通解决此问题,请使用下列方法之一:

  • 对于Response.End,调用HttpContext.Current.ApplicationInstance.CompleteRequest方法,而不是Response.End ,可以绕过对Application_EndRequest事件的代码执行。
  • 对于Response.Redirect,使用重载, Response.Redirect (bool endResponse 字符串 url)传递false以取消内部调用Response.EndendResponse参数。例如:
      Response.Redirect ("nextpage.aspx", false);
    						
    如果您使用此替代方法,将执行后面Response.Redirect的代码。
  • 对于Server.Transfer,而是使用Server.Execute方法。

 

分享到:
评论

相关推荐

    【ASP.NET编程知识】ASP.NET实现从服务器下载文件问题处理.docx

    例如,如果使用 Response.End 方法,可能会出现 ThreadAbortException 异常。这是因为 Response.End 方法会终止页面的执行,并将执行切换到应用程序的事件处理中。 5. 使用 HttpContext.Current.Application...

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

    这两天在开发调试过程中,老是会出现在一个 “正在中止线程“...以下是主要信息的摘要: 症状 如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 t

    高效的使用 Response.Redirect解决一些不必要的问题

    这个应用大量的使用了 Response.Redirect (是的 endResponse= true),这个就是可扩展性问题的根源。通过endResponse = false 在Response.Redirect将会解决这个问题. 但这样做会导致应用程序出现一些奇怪的问题。因为...

    实现服务器文件下载,使你一看就明白

    - 对于`Response.Redirect()`,如果希望避免内部调用`Response.End()`,可以使用带`endResponse`参数的重载版本,如`Response.Redirect("nextpage.aspx", false)`,设置`endResponse`为`false`。 4. **异常处理**...

    ASP.NET实现从服务器下载文件问题处理

    在使用`Response.Redirect`进行页面重定向时,如果内部调用了`Response.End()`,同样可能会抛出`ThreadAbortException`。为了避免这种情况,可以使用`Response.Redirect`的重载版本,比如`Response.Redirect("next...

    响应重定向拦截器

    6. 使用`HttpResponse.Redirect`或`HttpResponse.RedirectPermanent`方法进行适当的重定向,而不是简单地抛出`ThreadAbortException`。 这样的设计可以使应用程序具有更高的可定制性和灵活性,同时避免了`...

    由 TypeInitializationException 引起的问题

    即使在第一次发生 ThreadAbortException 的错误时,使用 thread.ResetAbort() 来重新释放该对象,效果仍然是一样。 为什么会出现这种问题呢?这是因为 TypeInitializationException 异常是由静态构造函数引起的。在...

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

    SqlException 发生在 SQL Server 返回警告或错误时。例如,尝试执行无效的 SQL 语句时,会引发 SqlException。 16. InvalidPrinterException InvalidPrinterException 发生在试图用无效的打印机设置来访问打印机时...

    C# CefSharp(Google Chrome Webkit内核)如何在Winforms应用程序中使用

    如果你需要对网络请求进行拦截或处理,可以使用`RequestHandler`。创建一个类继承`IRequestHandler`并实现其接口,然后在`CefSettings`中设置: ```csharp public class MyRequestHandler : IRequestHandler { ...

    Webcast20050111_PPT.zip

    描述中提到“如果你还在为缺乏各种帮助文档而发愁,看看这个”,这表明这个压缩文件可能包含了丰富的学习资源,可能是解决.NET开发中遇到问题的实用指南或者最佳实践,对于开发者来说,它可能是一个宝贵的参考资料。...

    csharp.rar_KProtectProcess_c#保护进程_c#异常终止_c#的Socket终止_保护进程

    2. 进程间通信:创建一个守护进程,该守护进程监视主进程的状态,如果主进程被尝试终止,守护进程可以采取行动恢复或重新启动它。这通常通过命名管道、套接字或内存映射文件等IPC技术实现。 在描述中提到的"360也...

    ASP.NET异常类包

    你还可以使用finally块来确保某些清理工作总是在try-catch之后执行,无论是否发生异常: ```csharp try { // 可能抛出异常的代码 } catch (Exception ex) { // 处理异常 } finally { // 清理资源 } ``` 更高级...

    C#多线程之线程控制详解

    线程定义是指在C#中定义一个线程的执行体,使用Lambda表达式来定义线程的执行体。 ```csharp mThread = new Thread(() => { try { for (int j = 0; j ; j++) { int vSum = 0; this.textBox1.Text += "--->"; ...

    关闭线程Thread 解决进程中的问题

    需要注意的是,如果调用 Thread.CurrentThread.Abort() 方法关闭主线程的话,就会抛出 ThreadAbortException 异常。因此,这种方法不可取。 MSDN 对前台线程和后台线程的解释是:托管线程或者是后台线程,或者是...

    使用单独的线程执行程序代码

    10. **并发异常处理**:多线程环境下,需要考虑线程中止异常(`ThreadAbortException`)和其他可能的并发异常,如`NullReferenceException`或`ArgumentOutOfRangeException`。 11. **并行编程库(Parallel Patterns...

    c#多线程学习代码资料

    在编程领域,C#是一种广泛使用的面向对象的编程语言,尤其在开发Windows应用程序、Web服务以及游戏开发中占据重要地位。多线程是C#中一个核心特性,它允许程序同时执行多个任务,提高程序效率并优化资源利用。这篇...

    线程常用方法示例

    调用`Abort`会引发一个`ThreadAbortException`,线程通常会在处理这个异常时结束。然而,线程可以捕获此异常并进行清理工作。 ```csharp Thread threadToAbort = ... threadToAbort.Abort(); ``` 3. **Join方法...

    C#多线程学习(二)如何操纵一个线程.pdf

    在现代软件开发中,多线程编程是一个非常重要的概念,它允许程序同时执行两个或多个部分,以提高应用程序的效率和响应能力。C# 作为一门现代编程语言,提供了强大的多线程支持,通过System.Threading命名空间中的类...

Global site tag (gtag.js) - Google Analytics