在Elapsed事件中中止线程

时间:2017-08-03 10:38:43

标签: c# multithreading timer

是否需要在已用事件中中止计时器线程?或.net会自动执行此操作吗?这是我的代码:

private static void m_checker_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    Console.WriteLine("[threadid:" + Thread.CurrentThread.ManagedThreadId + "]");
    Thread.CurrentThread.Abort();
}

1 个答案:

答案 0 :(得分:2)

不,没有必要(如果防止资源未分配,可能会有害)。请参阅MSDN示例here,但不会这样做。 This post提出了一个类似的问题,它在评论/答案中有一些好处(特别是,回调运行的线程由系统拥有)。

如果您想要停止计时器,只需将其Enabled属性设置为false,例如:

private static void m_checker_Elapsed(object source, ElapsedEventArgs e)
{
    Console.WriteLine("Foo");
    if (condition)
        (source as Timer).Enabled = false;
}