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

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

Версия 18:31, 26 мая 2010

Using Abort(object)

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Using Abort(object).

using System; using System.Threading;

class MyThread {

 public Thread thrd;  
   
 public MyThread(string name) {  
   thrd = new Thread(new ThreadStart(this.run)); 
   thrd.Name = name; 
   thrd.Start();  
 }  
 
 // This is the entry point for thread.  
 void run() {  
   try { 
     Console.WriteLine(thrd.Name + " starting."); 

     for(int i = 1; i <= 1000; i++) {  
       Console.Write(i + " ");  
       if((i%10)==0) { 
         Console.WriteLine(); 
         Thread.Sleep(250); 
       } 
     } 
     Console.WriteLine(thrd.Name + " exiting normally.");  
   } catch(ThreadAbortException exc) { 
     Console.WriteLine("Thread aborting, code is " + 
                        exc.ExceptionState); 
   } 
 }  

}

public class UseAltAbort {

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

   Thread.Sleep(1000); // let child thread start executing 

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

   mt1.thrd.Join(); // wait for thread to terminate 

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

}


      </source>


Using ResetAbort()

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Using ResetAbort().

using System; using System.Threading;

class MyThread {

 public Thread thrd;  
   
 public MyThread(string name) {  
   thrd = new Thread(new ThreadStart(this.run)); 
   thrd.Name = name; 
   thrd.Start();  
 }  
 
 // This is the entry point for thread.  
 void run() {  
   Console.WriteLine(thrd.Name + " starting."); 

   for(int i = 1; i <= 1000; i++) {  
     try { 
       Console.Write(i + " ");  
       if((i%10)==0) { 
         Console.WriteLine(); 
         Thread.Sleep(250); 
       } 
     } 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.");  
 } 

}

public class ResetAbort {

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

   Thread.Sleep(1000); // let child thread start executing 

   Console.WriteLine("Stopping thread.");  
   mt1.thrd.Abort(0); // this won"t stop the thread 

   Thread.Sleep(1000); // let child execute a bit longer 

   Console.WriteLine("Stopping thread.");  
   mt1.thrd.Abort(100); // this will stop the thread 

   mt1.thrd.Join(); // wait for thread to terminate 

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

}


      </source>