Csharp/CSharp Tutorial/Thread/Thread Abort — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:20, 26 мая 2010

Destroying Threads

<source lang="csharp">using System; using System.Threading; class MainClass {

 static int MyCount = 0;
 static void Main(string[] args)
 {
   MyClassThread me = new MyClassThread();
   Thread MyNewThread = new Thread(new ThreadStart(me.MyThread));
   MyNewThread.Start();
   if (MyCount == 0)
     MyNewThread.Abort();
 }

} class MyClassThread {

 public void MyThread()
 {
 }

}</source>

Stopping a thread

<source lang="csharp">using System; using System.Threading;

class MyThread {

 public Thread thrd;  
   
 public MyThread(string name) {  
   thrd = new Thread(this.run); 
   thrd.Name = name; 
   thrd.Start();  
 }  
 
 void run() {  
   Console.WriteLine(thrd.Name + " starting."); 

   for(int i = 1; i <= 100; i++) {  
     Console.Write(i + " ");  
     Thread.Sleep(50); 
   } 
   Console.WriteLine(thrd.Name + " exiting.");  
 }  

}

class MainClass {

 public static void Main() {  
   MyThread mt1 = new MyThread("My Thread");  

   Thread.Sleep(1000); 
 
   Console.WriteLine("Stopping thread.");  
   mt1.thrd.Abort(); 

   mt1.thrd.Join(); 

   Console.WriteLine("Main thread terminating.");  
 }  

}</source>

My Thread starting.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Stopping thread.
Main thread terminating.

Use Abort(object)

<source lang="csharp">using System; using System.Threading;

class MyThread {

 public Thread thrd;  
   
 public MyThread(string name) {  
   thrd = new Thread(this.run); 
   thrd.Name = name; 
   thrd.Start();  
 }  
 
 void run() {  
   try { 
     Console.WriteLine(thrd.Name + " starting."); 

     for(int i = 1; i <= 100; i++) {  
       Console.Write(i + " ");  
       Thread.Sleep(50); 
     } 
     Console.WriteLine(thrd.Name + " exiting normally.");  
   } catch(ThreadAbortException exc) { 
     Console.WriteLine("Thread aborting, code is " + 
                        exc.ExceptionState); 
   } 
 }  

}

class MainClass {

 public static void Main() {  
   MyThread mt1 = new MyThread("My Thread");  

   Thread.Sleep(1000); 

   Console.WriteLine("Stopping thread.");  
   mt1.thrd.Abort(100); 

   mt1.thrd.Join(); 

   Console.WriteLine("Main thread terminating.");  
 }  

}</source>

My Thread starting.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Stopping thread.
Thread aborting, code is 100
Main thread terminating.

Use ResetAbort()

<source lang="csharp">using System; using System.Threading;

class MyThread {

 public Thread thrd;  
   
 public MyThread(string name) {  
   thrd = new Thread(this.run); 
   thrd.Name = name; 
   thrd.Start();  
 }  
 
 void run() {  
   Console.WriteLine(thrd.Name + " starting."); 

   for(int i = 1; i <= 100; i++) {  
     try { 
       Console.Write(i + " ");  
       Thread.Sleep(50); 
     } catch(ThreadAbortException exc) { 
       if((int)exc.ExceptionState == 0) { 
         Console.WriteLine("Abort Cancelled! Code is " + exc.ExceptionState); 
         Thread.ResetAbort(); 
       } else  
         Console.WriteLine("Thread aborting, code is " + exc.ExceptionState); 
     } 
   } 
   Console.WriteLine(thrd.Name + " exiting normally.");  
 } 

}

class MainClass {

 public static void Main() {  
   MyThread mt1 = new MyThread("My Thread");  

   Thread.Sleep(1000); 

   Console.WriteLine("Stopping thread.");  
   mt1.thrd.Abort(100); 

   mt1.thrd.Join(); 

   Console.WriteLine("Main thread terminating.");  
 }  

}</source>