Interrupt方法,只可以中断处于WaitSleepJoin状态的线程,当线程不为WaitSleepJoin时,线程将恢复执行。
调用Interrupt方法会产生ThreadInterruptException异常
class Program
{
static void Main(string[] args)
{
StayAwake stayAwake = new StayAwake();
Thread newThread = new Thread(new ThreadStart(stayAwake.ThreadMethod));
newThread.Start();
newThread.Name = "new thread";
newThread.Interrupt();
Console.WriteLine("main thread calls interrupt on new thread");
stayAwake.SleepSwitch = true;
Console.WriteLine("1stat " + Thread.CurrentThread.ThreadState);
newThread.Join();
}
}
class StayAwake
{
bool sleepSwitch = false;
public bool SleepSwitch
{
set
{
sleepSwitch = value;
}
}
public void ThreadMethod()
{
Console.WriteLine("new thread is executing thread method");
while (!sleepSwitch)
{
Thread.SpinWait(10000000);
}
try
{
Console.WriteLine("2name " + Thread.CurrentThread.Name);
Console.WriteLine("2stat " + Thread.CurrentThread.ThreadState);
Console.WriteLine("new thread going to sleep");
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("new thread can not go to sleep -" + "interrupted by main thread");
}
}
}