スレッドは中止されていました
-
07-07-2019 - |
質問
Server.Transfer を使用しています。すべて正常に動作しますが、例外ログには次の例外が表示されます。
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)
上記の例外を回避するためのアイデア。
解決
この例外は、現在のメソッドの実行を停止するために、 Server.Transfer
の呼び出しによってスローされます。 Response.Redirect
を実行すると、まったく同じことがスローされます。 >。
2つの選択肢があります:
- キャッチして再スロー
ThreadAbortException /再実行
Server.Transfer
- あなたが
場所でのみ
Server.Transfer
を実行する キャッチされない場所(推奨)
編集:スクラッチ、 http://support.microsoft.com/ kb / 312629 には他にもいくつかの提案がありますが、上記の#2をお勧めします。
他のヒント
これを解決する別の方法は、生成されたエラーをキャッチし、再スローしないことです。
catch (ThreadAbortException)
{
}
Caling Server.Transferは、常にThreadAbortExceptionをスローするResponse.Endを呼び出します。これは「特別」です例外は、キャッチブロックでキャッチできますが、キャッチブロックの最後に常に再スローされるためです。エラーログにThreadAbortExceptionsを無視させます。
この問題は、Response.RedirectメソッドとServer.Transferメソッドで発生します。両方のメソッドが内部でResponse.Endを呼び出すためです。
この問題の解決策は次のとおりです。
Server.Transferの場合は、代わりにServer.Executeメソッドを使用します。
サンプルのダウンロード例については、このリンクをご覧ください。 http://jayeshsorathia.blogspot.com/2012 /03/thread-was-being-aborted-error-occured.html
Response.End()を次のように置き換えると、問題の修正に役立ちました。
Response.Flush(); Response.Close();
Response.End()
を HttpContext.Current.ApplicationInstance.CompleteRequest();に置き換えます