下面是我的代码,我想在条件为真的情况下重新启动一个线程。我需要怎么做才有办法终止线程并重新启动该线程是否可行?例如
private Thread demoThread = null;
this.demoThread = new Thread(new ThreadStart(this.StartForLoop));
this.demoThread.Start();
private void StartForLoop()
{
if(i=0)
{
//restart this thread...
}
}
答案 0 :(得分:3)
完成执行后,无法重新启动线程。您可以启动一个新线程,或者使用已启动并保持运行的pool of worker threads来查找任务然后再回到睡眠状态。
如果您想要在带外运行的任务相对较短,并且您需要使用ThreadPool经常运行它们。
如果您要定位更新版本的.Net框架,最好考虑将新的async功能与Tasks API结合使用,因为它提供了比直接使用ThreadPool更高级别的抽象排队工作单位。
但是,如果您要做的是让后台线程等待生产者 - 消费者模式,那么您可以使用ManualResetEvent或Semaphore并让您的线程在对象上等待发出信号。当事件发出信号时,线程可以恢复并消耗它需要消耗的任何东西,然后再次进入睡眠状态,直到还有更多事情要做。
答案 1 :(得分:1)
Thread
个对象只能运行一次
如果您想再次启动它,则需要创建new Thread
。