/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example14_3.cs illustrates the ThreadState property
*/
using System;
using System.Threading;
public class Example14_3
{
// the Countdown method counts down from 10 to 1
public static void Countdown()
{
for (int counter = 10; counter > 0; counter--)
{
Console.Write(counter.ToString() + " ");
}
Console.WriteLine();
}
// the DumpThreadState method displays the current Thread's state
// Note that ThreadState is a bitmask, and multiple states for the
// same thread are valid
public static void DumpThreadState (
Thread t
)
{
Console.Write("Current state: ");
if ((t.ThreadState & ThreadState.Aborted) == ThreadState.Aborted)
Console.Write("Aborted ");
if ((t.ThreadState & ThreadState.AbortRequested) ==
ThreadState.AbortRequested)
Console.Write("AbortRequested ");
if ((t.ThreadState & ThreadState.Background) ==
ThreadState.Background)
Console.Write("Background ");
if ((t.ThreadState &
(ThreadState.Stopped | ThreadState.Unstarted |
ThreadState.Aborted)) == 0)
Console.Write("Running ");
if ((t.ThreadState & ThreadState.Stopped) == ThreadState.Stopped)
Console.Write("Stopped ");
if ((t.ThreadState & ThreadState.StopRequested) ==
ThreadState.StopRequested)
Console.Write("StopRequested ");
if ((t.ThreadState & ThreadState.Suspended) ==
ThreadState.Suspended)
Console.Write("Suspended ");
if ((t.ThreadState & ThreadState.SuspendRequested) ==
ThreadState.SuspendRequested)
Console.Write("SuspendRequested ");
if ((t.ThreadState & ThreadState.Unstarted) ==
ThreadState.Unstarted)
Console.Write("Unstarted ");
if ((t.ThreadState & ThreadState.WaitSleepJoin) ==
ThreadState.WaitSleepJoin)
Console.Write("WaitSleepJoin ");
Console.WriteLine();
}
public static void Main()
{
// create a second thread
Thread t2 = new Thread(new ThreadStart(Countdown));
DumpThreadState(t2);
// launch the second thread
t2.Start();
DumpThreadState(t2);
// and meanwhile call the Countdown method from the first thread
Countdown();
// shut down the second thread
t2.Abort();
DumpThreadState(t2);
}
}