System.Timers.Timer是否在终止其工作线程时终止?

时间:2014-04-04 08:00:52

标签: c# .net multithreading timer

我有这些代码在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是否在终止其工作线程时终止?

2 个答案:

答案 0 :(得分:0)

  1. 你不能通过中止线程来杀死计时器。
  2. Timer有自己的线程来调用你的事件处理程序。
  3. 另外,由于@Damien_The_Unbeliever表示计时器不属于任何线程,因此它是系统对象。
  4. 由于您的事件处理程序,
  5. GC不会收集计时器。
  6. 你应该在你的线程方法实现中使用try-catch来捕获ThreadAbortException并停止计时器。

答案 1 :(得分:0)

MSDN C# Threading

我建议这个链接用于一般使用线程。还提到Abort将中断线程并防止使用的资源被清除。

更好的选择是调用方法来禁用timeWorker类中的while循环,如

public void RequestStop()
{
    running = false;
}

当工人在循环中完成他的工作时

public void DoWork()
{
    while(running)
    {
        ...
    }
//execution stopped
}

带有变量private volatile bool running