示例
Program.cs
namespace ThreadingApp
{
internal class Program
{
static void Main(string[] args)
{
Thread mainThread = Thread.CurrentThread;
mainThread.Name = "Main thread";
Console.WriteLine(mainThread.Name + " Started"); //Main thread
NumbersUpCounter numbersUpCounter = new NumbersUpCounter() { Count = 100 };
NumbersDownCounter numbersDownCounter = new NumbersDownCounter() { Count = 100 };
ThreadStart ts1 = new ThreadStart(numbersUpCounter.CountUp);
Thread t1 = new Thread(ts1) { Name = "CountUp Thread", Priority = ThreadPriority.Highest };
t1.Start();
Console.WriteLine($"{t1.Name}({t1.ManagedThreadId}) is {t1.ThreadState.ToString()}");
ThreadStart ts2 = new ThreadStart(numbersDownCounter.CountDown);
Thread t2 = new Thread(ts2) { Name = "CountDown Thread", Priority = ThreadPriority.Lowest };
t2.Start();
Console.WriteLine($"{t2.Name}({t2.ManagedThreadId}) is {t2.ThreadState.ToString()}");
//mainThread waiting for t1 and t2 completed
t1.Join();
t2.Join();
Console.WriteLine(mainThread.Name + " Completed");
Console.ReadKey();
}
}
class NumbersUpCounter
{
public int Count { get; set; }
public void CountUp()
{
try
{
Console.WriteLine("CountUp Started");
Thread.Sleep(1000);
for (int i = 1; i <= Count; i++)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write($"i = {i}, ");
Thread.Sleep(100);
}
Thread.Sleep(1000);
Console.WriteLine("CountUp Completed");
}
catch (ThreadInterruptedException ex)
{
Console.WriteLine("CountUp Thread interrupted: " + ex.ToString());
}
}
}
class NumbersDownCounter
{
public int Count { get; set; }
public void CountDown()
{
try
{
Console.WriteLine("CountDown Started");
Thread.Sleep(1000);
for (int j = Count; j >= 1; j--)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write($"j = {j}, ");
Thread.Sleep(100);
}
Thread.Sleep(1000);
Console.WriteLine("CountDown Completed");
}
catch (ThreadInterruptedException ex)
{
Console.WriteLine("CountDown Thread interrupted: " + ex.ToString());
}
}
}
}