如何限制计时器线程执行时间?我一直在运行计时器工作,工作时间不应超过30秒。
答案 0 :(得分:1)
执行此操作的唯一方法是使用第二个线程(可能是创建工作线程的线程)监视器然后将其终止或优雅地调用它以立即退出。杀死您应该避免的线程,并且仅作为最后的手段使用。以下是示例:
Thread t = new Thread(myLongThreadProc);
t.Start();
Thread.Sleep(30000);
t.Abort();
通过'优雅地调用它来退出',我的意思是将一些停止变量设置为某个值,并给线程一些短时间来退出自己,否则你会杀掉它。但它是你的线程函数的设计,使它实际上退出。以下是示例代码:
Thread t = new Thread(myLongThreadProc);
threadRun = true;
t.Start();
Thread.Sleep(30000);
threadRun = false; //this variable is monitored by thread
if (!t.Join(1000)) //inside your thread, make sure it does quit in one second
{ //when this variable is set to false
t.Abort();
}
我应该提一下你的调用者线程不需要休眠30秒,但你可以使用一个定时器(如果它是一个表单线程)或做一些有用的事情并定期检查 - 或者只有第三个工作线程算30秒......
答案 1 :(得分:0)
让你的工人方法启动一个30秒的计时器并检查它是否已经过去,因为你的工人做了它的事情:
bool timerElapsed;
public void DoWork()
{
timerElapsed=false;
System.Timers.Timer timer = new System.Timers.Timer(30000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
while (true)
{
if (timerElapsed)
{
// handle 30-sec elasped error
break;
}
// continue doing work and break when done
}
timer.Stop();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timerElapsed = true;
}