停止System.Timers.Timer

时间:2016-08-30 19:42:45

标签: c# timer

假设我有这段代码

public static Timer timer;

static void Main ()
{
    timer = new Timer ( 60 * 1000 );   // It ticks every minute
    timer.Elpased += One;
    timer.Elapsed += Two;
}

private static void One ( sender o, EventArgs e )
{
    timer.Stop ();
}

private static void Two ( sender o, EventArgs e )
{
    DoSomething ();
}

由于我假设'One'和'Two'将按订阅顺序执行,因此在'One'中停止Timer将阻止'Two'发生?

如果没有,我该怎么做?

1 个答案:

答案 0 :(得分:1)

System.Threading.Timer没有Elapsed个事件。它需要传递给构造函数的单个TimerCallback委托,它在ThreadPool线程上执行。

https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx

我相信您正在查看有System.Timers.Timer事件的Elapsed

https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx

我不相信有一种方法可以保证阻止Two以你描述的方式解雇。您必须假设OneTwo在两个不同的线程上完全同时执行。即使致电Stop(),也不能保证计时器无法再开启https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx

我的建议是在Two执行逻辑之后,如果它应该在One中执行操作,那么就有一个回调来处理分支逻辑。