我有这些代码在System.Timers.Timer
调用的方法上使用Thread
:
private void timeWorker()
{
var timer = new Timer(1000);
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
}
public MyConstructor()
{
var thread=new Thread(timeWorker);
thread.IsBackground = true;
thread.Start();
//
thread.Abort();
}
System.Timers.Timer
是否在终止其工作线程时终止?
答案 0 :(得分:0)
Timer
有自己的线程来调用你的事件处理程序。GC
不会收集计时器。你应该在你的线程方法实现中使用try-catch来捕获ThreadAbortException
并停止计时器。
答案 1 :(得分:0)
我建议这个链接用于一般使用线程。还提到Abort
将中断线程并防止使用的资源被清除。
更好的选择是调用方法来禁用timeWorker
类中的while循环,如
public void RequestStop()
{
running = false;
}
当工人在循环中完成他的工作时
public void DoWork()
{
while(running)
{
...
}
//execution stopped
}
带有变量private volatile bool running
。