2

ご存知のとおり、Server.Transferは実行時にThreadAbortExceptionをスローします。

また、ThreadAbortExceptionは例外を継承します:

ここに画像の説明を入力してください

では、なぜ例外がキャッチブロックに入らないのか:

  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (Exception  e)
   { }

それが中になりますが:

  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (ThreadAbortException e)
   { }

編集 、

これは、2つのシナリオの両方で機能しています。以前はなぜ機能しなかったのかわかりません。無視して下さい。

誤解を招く申し訳ありません。

4

3 に答える 3

2

catch (Exception) を介して ThreadAbortException をキャッチできないというのは正しくありません。

次のコードは、「Handled Exception: Thread was being aborted.」を出力し、例外が実際にキャッチされたことを証明します。

using System;
using System.Threading;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                test();
            }

            catch (Exception ex)
            {
                Console.WriteLine("Handled Exception: " + ex.Message);
            }
        }

        static void test()
        {
            Thread.CurrentThread.Abort();
        }
    }
}

例外がキャッチされたかどうかをどのようにテストしましたか?

于 2012-09-10T10:08:41.950 に答える