Thread.Abort 方法

[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)] 
 public void Abort()  
在调用此方法的线程上引起 ThreadAbortException,以开始终止此线程的过程。 调用此方法一般会终止线程。

在线程上调用此方法时,系统在线程中引起 ThreadAbortException 以停止它。 ThreadAbortException 是一个能够由应用程序代码捕获的特殊异常,但除非调用 ResetAbort,不然会在 catch 块的结尾再次引起它。ResetAbort 取消停止请求,并防止 ThreadAbortException 终止该线程。未执行的 finally 块将在线程终止前执行。函数

备注:线程

一、若是对还没有启动的线程调用 Abort,则当调用 Start 时该线程将停止。若是对被阻止或正在休眠的线程调用 Abort,则该线程被中断而后停止。orm

二、若是在已挂起的线程上调用 Abort,则将在调用 Abort 的线程中引起 ThreadStateException,并将 AbortRequested 添加到被停止的线程的 ThreadState 属性中。 直到调用 Resume 后,才在挂起的线程中引起 ThreadAbortExceptionget

三、若是在正在执行非托管代码的托管线程上调用 Abort,则直到线程返回到托管代码才引起 ThreadAbortException。string

四、若是同时出现两次对 Abort 的调用,则可能一个调用设置状态信息,而另外一个调用执行 Abort。可是,应用程序没法检测到此状况。it

五、对线程调用了 Abort 后,线程状态包括 AbortRequested。 成功调用 Abort 而使线程终止后,线程状态更改成 Stopped。若是有足够的权限,做为 Abort 目标的线程就可使用 ResetAbort 方法取消停止操做。有关说明如何调用 ResetAbort 方法的示例,请参见 ThreadAbortException 类。io

 

using System;
using System.Threading;
using System.Security.Permissions;form

public class ThreadWork {
    public static void DoWork()
    {
        try
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine("Thread - working.");
                Thread.Sleep(100);
            }
        }
        catch (ThreadAbortException e)
        {
            Console.WriteLine("Thread - caught ThreadAbortException - resetting.");
            Console.WriteLine("Thread.state:{0}", Thread.CurrentThread.ThreadState.ToString());
            Console.WriteLine("Exception message: {0}", e.Message);
            Thread.ResetAbort();class

   //若是注释掉 Thread.ResetAbort();  fianlly中的代码仍会执行,但try catch finally以后的代码不会被执行.然后跳转到调用abort()的函数中(这里为主函数)thread

  }
        finally
        {
         Console.WriteLine("Thread in finally.Thread.state:{0}",Thread.CurrentThread.ThreadState.ToString());

        }

 //若是运行  Thread.ResetAbort();  如下代码仍会执行,然后跳转到调用abort()的函数中(这里为主函数)
        Console.WriteLine("Thread - still alive and working.");

Console.WriteLine("Thread.state:{0}", Thread.CurrentThread.ThreadState.ToString());
        Thread.Sleep(1000);
        Console.WriteLine("Thread - finished working.");
    }
}

class ThreadAbortTest
{
    public static void Main()
    {
        ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
        Thread myThread = new Thread(myThreadDelegate);
        myThread.Start();
        Thread.Sleep(100);
        Console.WriteLine("Main - aborting my thread.");
        myThread.Abort();
        myThread.Join();
        Console.WriteLine("Thread.state:{0}", myThread.ThreadState.ToString());
        Console.Read();

}
}

 

public void Abort(Object stateInfo)

在调用此方法的线程上引起 ThreadAbortException,以开始终止此线程。

并提供有关线程终止的异常信息的过程。调用此方法一般会终止线程。

using System;
using System.Threading;

class Test
{
    public static void Main()
    {
        Thread newThread = new Thread(new ThreadStart(TestMethod));
        newThread.Start();
        Thread.Sleep(1000);

        // Abort newThread.
        Console.WriteLine("Main aborting new thread.");
        newThread.Abort("Information from Main.");

   //停止线程,并提供object类型的有关停止的信息。

        // Wait for the thread to terminate.
        newThread.Join();
        Console.WriteLine("New thread terminated - Main exiting.");
        Console.Read();
    }

    static void TestMethod()
    {
        try
        {
            while (true)
            {
                Console.WriteLine("New thread running.");
                Thread.Sleep(1000);
            }
        }
        catch (ThreadAbortException abortException)
        {
            Console.WriteLine((string)abortException.ExceptionState);

   //abortException.ExceptionState  获取额外的停止信息。        }    }}

相关文章
相关标签/搜索