ThreadAbortException se produce si usa Response.End, Response.Redirect o Server.Transfer.

Este artículo le ayuda a resolver el error ThreadAbortException que se produce si usa Response.End, Response.Redirecto Server.Transfer.

Versión original del producto: ASP.NET en .NET Framework 4.5.2, ASP.NET en .NET Framework 3.5 Service Pack 1
Número de KB original: 312629

Síntomas

Si usa el Response.Endmétodo , Response.Redirecto Server.Transfer , se produce una excepción ThreadAbortException. Puede usar una try-catch instrucción para detectar esta excepción.

Causa

El Response.End método finaliza la ejecución de la página y desplaza la ejecución al evento Application_EndRequest de la canalización de eventos de la aplicación. No se ejecuta la línea de código siguiente Response.End .

Este problema se produce en los Response.Redirect métodos y Server.Transfer porque ambos métodos llaman a Response.End internamente.

Solución

Para solucionar este problema, use uno de los métodos siguientes:

  • Para Response.End , llame al HttpContext.Current.ApplicationInstance.CompleteRequest método en lugar de para omitir la ejecución del Response.End código al Application_EndRequest evento .

  • Para Response.Redirect, use una sobrecarga, Response.Redirect(String url, bool endResponse) que pase false para que el parámetro endResponse suprima la llamada interna a Response.End. Por ejemplo:

     Response.Redirect ("nextpage.aspx", false);
    

    Si usa esta solución alternativa, se ejecuta el código siguiente Response.Redirect .

  • Para Server.Transfer, use el Server.Execute método en su lugar.

Aunque ASP.NET controla esta excepción, puede usar la try-catch instrucción para detectar esta excepción. Por ejemplo:

try
{
    Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
    Response.Write (ex.Message);
}

Agregue un punto de interrupción en la Response.Write línea y observe que se alcanza este punto de interrupción. Al examinar la excepción, observe que se produce la excepción ThreadAbortException.