假设我有这段代码
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'发生?
如果没有,我该怎么做?
答案 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
以你描述的方式解雇。您必须假设One
和Two
在两个不同的线程上完全同时执行。即使致电Stop()
,也不能保证计时器无法再开启https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx。
我的建议是在Two
执行逻辑之后,如果它应该在One
中执行操作,那么就有一个回调来处理分支逻辑。