在控制软件的开发过程中,有可能会出现强力终止程序的情况,但是你又使用了线程池,无法跳出程序,因为如果出现异常之后,多运行一行代码就可能会造成设备的损坏,但是不使用线程池的话又会造成系统性能降低。可是线程池本身不提供强制退出,只能通过IsCancellationRequrest退出线程,虽然强制退出可能造成其他问题,但是在控制软件中非常实用。这里提供一种使用线程和线程池结合的方法,通过强制退出线程来终止线程池的执行。
说白了就是把线程池嵌入到线程中使用,如果需要暴力终止,就直接调用线程的Abort()方法。
Thread th=null;
//开启线程
private void btnStart_Click(object sender,EventArgs e)
{
th=new Thread(new ThreadStart(Test));
th.Start();
}
private void Test()
{
try
{
for(int i=0;i<10000;i++)
{
Thread.Sleep(10);
ThreadPool.QueueUserWorkItem(t=>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
});
}
}
catch(Exception ex)
{
throw ex;
}
}
//终止线程
private void btnstop_Click(object sender,Eventargs e)
{
if(th!=null)
{
th.Abort();
}
}