首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreadAbortException有什么特别之处?

ThreadAbortException有什么特别之处?
EN

Stack Overflow用户
提问于 2012-09-10 09:56:50
回答 3查看 331关注 0票数 2

如我们所知,Server.Transfer在执行时抛出ThreadAbortException。

此外,ThreadAbortException继承了异常:

那么,为什么异常不会进入catch块:

代码语言:javascript
复制
  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (Exception  e)
   { }

虽然它将在:

代码语言:javascript
复制
  try
   {
         Server.Transfer("NoPremissionSell.aspx");
   }

  catch (ThreadAbortException e)
   { }

编辑,

这在这两种情况下都是可行的。我不知道为什么它以前不起作用。请置之不理。

抱歉误导你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-10 10:01:20

.NET运行时(作为程序集执行基础的命令语言基础结构,CLI )对许多异常类型有不同的对待。

例如:StackOverflowException根本无法被.NET代码捕获。

其原因取决于例外情况。在StackOverflowException的情况下,因为CLI不能保证进程状态的正确性。

ThreadAbortException的情况下,特殊处理是因为当它被捕获时,它必须被重新抛出(自动),这样线程就会结束。

票数 5
EN

Stack Overflow用户

发布于 2012-09-10 10:01:23

ThreadAbortException在这方面是特别的,即使它被捕获,它也会自动被重新抛出。线程已中止。代码可以清除,但除非调用Thread.ResetAbort,否则不能停止中止。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx

票数 2
EN

Stack Overflow用户

发布于 2012-09-10 10:08:41

不能通过catch (异常)捕获ThreadAbortException是不正确的。

下面的代码打印“已处理的异常:线程被中止”,证明异常确实被捕获:

代码语言:javascript
复制
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();
        }
    }
}

你是如何测试异常是否被捕获的?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12349287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档