Csharp/C Sharp/Thread/Thread Abort — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 14:42, 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>