2

您好我有以下测试代码:

class Program
{
    static void Main(string[] args)
    {
        Thread t = new Thread(Work);
        t.Start();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        t.Join();
        Console.WriteLine("End");
    }

    static void Work()
    {
        int i = 0;
        while (i<10)
        {
            try
            {
                while(true);
            }
            catch(ThreadAbortException)
            {
                Thread.ResetAbort();
            }

            Console.WriteLine("I will come back!");
            i++;
        }
    }
}

每次中止时,都会执行 Thread.ResetAbort() 。我想知道这个 ResetAbort 做了什么。因为当我运行它时,我看到了以下输出:我会回来的!我会回来!我会回来!而且我没有看到输出“End”——看来这个程序根本没有结束。你知道为什么吗?谢谢!

4

3 回答 3

3

它取消中止线程的请求。如此处所示。所以在这种情况下,循环将继续,线程应该仍然活着。

于 2011-05-11T18:50:40.243 回答
1

其他人的回答ResetAbort是正确的。没有输出“End”的原因是因为t.Join()永远不会返回。这是因为您的线程仅尝试中止 3 次,并且您的循环包含 10 次无限循环尝试。 Join当目标线程完成运行它的委托时返回,而你的委托没有完成。

于 2011-05-11T18:56:35.460 回答
0

ResetAborts 取消线程的中止请求

于 2011-05-11T18:51:27.573 回答