Thread wurde abgebrochen
-
07-07-2019 - |
Frage
ich benutze Server.transfer. Alles funktioniert gut, aber das Ausnahmeprotokoll zeigt die folgende Ausnahme.
System.Threading.ThreadAbortException: Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at System.Web.HttpServerUtility.Transfer(String path)
Jede Idee, um oben ausnahme zu vermeiden.
Lösung
Diese Ausnahme wird durch den Anruf angeworfen Server.Transfer
Um die Ausführung der aktuellen Methode zu stoppen - wird genau dasselbe geworfen, wenn Sie dies tun Response.Redirect
.
Die beiden Möglichkeiten, die Sie haben, sind:
- Fangen und überdenken Sie die Threadabortexception / formulieren Sie die
Server.Transfer
- Stellen Sie sicher, dass Sie es nur tun
Server.Transfer
an Orten, an denen es nicht gefangen wird (empfohlen)
BEARBEITEN: Vergiss das, http://support.microsoft.com/kb/312629 Hat ein paar andere Vorschläge zu versuchen, aber ich empfehle immer noch #2 oben.
Andere Tipps
Eine andere Möglichkeit, dies zu lösen, besteht darin, den generierten Fehler zu fangen und ihn nicht zu überdenken:
catch (ThreadAbortException)
{
}
Caling Server.transfer ruft die Antwort auf. Dies ist eine "besondere" Ausnahme, denn während es in einem Fangblock gefangen werden kann, wird es jedoch immer am Ende des Fangblocks wiedergeworfen. Ich würde Ihre Fehlerprotokollierung Threadabortexzeptionen ignorieren lassen.
Dieses Problem tritt in der Antwort auf. Redirect und Server.Transfer -Methoden, da beide Methoden die Antwort aufrufen.
Die Lösung für dieses Problem ist wie folgt.
Verwenden Sie für Server.transfer stattdessen die Server.execute -Methode.
Besuchen Sie diesen Link zum Download -Beispielbeispiel. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html
Response.end () durch Folgendes half dabei, das Problem zu beheben.
Reaktion.flush (); Antwort.CLOSE ();
Verweisen Können wir response.flush () anstelle von response.end () verwenden
Ersetzen Response.End()
Mit HttpContext.Current.ApplicationInstance.CompleteRequest();