31

私は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)

上記の例外を避けるためのアイデア。

4

6 に答える 6

40

この例外はServer.Transfer、現在のメソッドの実行を停止するために への呼び出しによってスローされます。これを実行すると、まったく同じことがスローされますResponse.Redirect

次の 2 つの選択肢があります。

  • ThreadAbortException をキャッチして再スローする / 再実行する Server.Transfer
  • Server.Transfer引っかからない場所でのみ行うことを確認してください(推奨)

編集:スクラッチhttp://support.microsoft.com/kb/312629には他にも試してみるべきいくつかの提案がありますが、それでも上記の #2 をお勧めします。

于 2009-09-16T14:49:30.417 に答える
10

これを解決する別の方法は、生成されたエラーをキャッチし、再スローしないことです。

        catch (ThreadAbortException)
        { 
        }
于 2013-01-15T08:02:20.723 に答える
8

この問題は、Response.Redirect メソッドと Server.Transfer メソッドで発生します。これは、両方のメソッドが内部的に Response.End を呼び出すためです。

この問題の解決策は次のとおりです。

Server.Transfer の場合は、代わりに Server.Execute メソッドを使用してください。

サンプルのダウンロード例については、このリンクにアクセスしてください。http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

于 2012-04-23T09:52:11.687 に答える
8

Caling Server.Transfer は、常に ThreadAbortException をスローする Response.End を呼び出します。これは「特別な」例外です。これは、catch ブロックでキャッチできますが、catch ブロックの最後で常に再スローされるためです。エラー ログに ThreadAbortExceptions を無視させます。

于 2009-09-16T14:50:07.217 に答える
0

Response.End() を次のように置き換えると、問題の修正に役立ちました。

Response.Flush(); Response.Close();

Response.End() の代わりに Response.Flush () を使用できますか? を参照してください。

于 2016-08-11T18:15:51.823 に答える