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.Redirect o Server.Transfer .
Versión del producto original: ASP.NET en .NET Framework 4.5.2, ASP.NET en .NET Framework 3.5 Service Pack 1
Número KB original: 312629
Síntomas
Si usa el Response.End método Response.Redirect , , Server.Transfer o, se produce una excepción ThreadAbortException. Puede usar una instrucción try-catch para detectar esta excepción.
Causa
El método finaliza la ejecución de la página y cambia la ejecución al evento Application_EndRequest en la canalización de eventos Response.End de la aplicación. La línea de código siguiente Response.End no se ejecuta.
Este problema se produce en los Response.Redirect métodos and Server.Transfer porque ambos métodos llaman a Response.End internamente.
Solución
Para solucionar este problema, use uno de los métodos siguientes:
For
Response.End, llama al método en lugar de omitir la ejecución de código alHttpContext.Current.ApplicationInstance.CompleteRequestResponse.EndApplication_EndRequestevento.Para
Response.Redirect, use una sobrecarga, Response.Redirect(String url, bool endResponse) que pasa false para que el parámetro endResponse suprima la llamada interna aResponse.End. Por ejemplo:Response.Redirect ("nextpage.aspx", false);Si usa esta solución alternativa, se ejecutará el código
Response.Redirectsiguiente.For
Server.Transfer, use el método en suServer.Executelugar.
Aunque ASP.NET esta excepción, puede usar la try-catch instrucción para capturar 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 línea y observe que se ha alcanzado Response.Write este punto de interrupción. Al examinar la excepción, observe que se produce la excepción ThreadAbortException.