如何在C#中终止线程()

在C#中, 可以使用以下命令终止线程Abort()方法。 Abort()抛出ThreadAbortException到它调用的线程。由于此异常, 线程被终止。的重载列表中有两种方法Thread.Abort方法如下:
Abort()
Abort(对象)
Abort() 此方法引发ThreadAbortException在调用它的线程中, 开始终止线程的过程。通常, 此方法用于终止线程。
语法如下:

public void Abort();

异常情况:
  • SecurityException:如果呼叫者没有所需的权限。
  • ThreadStateException:如果正在中止的线程当前处于挂起状态。
例子:
//C# program to illustrate the //concept of Abort() method //on a single thread using System; using System.Threading; class ExampleofThread {//Non-Static method public void thread() { for ( int x = 0; x < 3; x++) { Console.WriteLine(x); } } }//Driver Class class ThreadExample {//Main method public static void Main() {//Creating instance for mythread() method ExampleofThread obj = new ExampleofThread(); //Creating and initializing threads Thread thr = new Thread( new ThreadStart(obj.thread)); thr.Start(); Console.WriteLine( "Thread is abort" ); //Abort thr thread //Using Abort() method thr.Abort(); } }

输出如下:
Thread is abort

说明:上面的示例显示了Thread类提供的Abort()方法的使用。通过使用thr.Abort(); 声明, 我们可以终止执行苏线。
Abort(对象) 此方法引发ThreadAbortException在调用它的线程中, 以开始终止线程的过程, 同时还提供有关线程终止的异常信息。通常, 此方法用于终止线程。
语法如下:
public void Abort(object information);

在这里信息包含要在线程停止时传递的任何信息。此信息只能通过使用以下方式访问异常状态的财产ThreadAbortException.
异常情况:
  • SecurityException:如果呼叫者没有所需的权限。
  • ThreadStateException:如果正在中止的线程当前处于挂起状态。
例子:
//C# program to illustrate the //concept of Abort(object) using System; using System.Threading; class ExThread {public Thread thr; public ExThread( string name) { thr = new Thread( this .RunThread); thr.Name = name; thr.Start(); }//Enetring point for thread void RunThread() { try { Console.WriteLine(thr.Name + " is starting." ); for ( int j = 1; j < = 100; j++) { Console.Write(j + " " ); if ((j % 10) == 0) { Console.WriteLine(); Thread.Sleep(200); } } Console.WriteLine(thr.Name + " exiting normally." ); } catch (ThreadAbortException ex) { Console.WriteLine( "Thread is aborted and the code is " + ex.ExceptionState); } } }//Driver Class class GFG {//Main method static void Main() {//Creating object of ExThread ExThread obj = new ExThread( "Thread " ); Thread.Sleep(1000); Console.WriteLine( "Stop thread" ); obj.thr.Abort(100); //Waiting for a thread to terminate. obj.thr.Join(); Console.WriteLine( "Main thread is terminating" ); } }

【如何在C#中终止线程()】输出如下:
Threadis starting. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Stop thread Thread is aborted and the code is 100 Main thread is terminating

重要事项:
  • 一种僵局如果调用Abort方法的线程持有中止的线程所需的锁, 则会发生这种情况。
  • 如果中止在尚未启动的线程上调用方法, 然后在调用启动时该线程将中止。
  • 如果中止在阻塞或正在休眠的线程上调用方法, 然后该线程将被中断, 然后中止。
  • If中止方法在挂起的线程上调用, 然后ThreadStateException被抛出到名为Abort的线程中, 并且中止要求被添加到线程状态被中止的线程的属性。
  • 一种ThreadAbortException直到被挂起的线程中才抛出恢复叫做。
  • 如果中止在当前正在执行非托管代码的托管线程上调用方法, 然后ThreadAbortException在线程返回托管代码之前不会抛出该错误。
  • 如果有两个电话中止同时出现, 则一个调用可能会设置状态信息, 而另一个调用可能会执行中止。但是, 应用程序无法检测到这种情况。
  • 后中止在线程上被调用, 线程的状态包括中止要求。由于成功调用Abort导致线程终止后, 线程的状态将更改为Stopped。如果有足够的权限, 则线程是中止可以使用ResetAbort方法。
参考:
  • https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.abort?view=netframework-4.7.2

    推荐阅读