停止系统.计时器.计时器
本文关键字:计时器 系统 | 更新日期: 2023-09-27 18:04:52
假设我有这样的代码
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 ();
}
因为我假设' 1 '和' 2 '将按订阅顺序执行,停止' 1 '中的计时器将阻止' 2 '发生?
如果没有,我该怎么做?
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.
我的建议是有一个回调处理分支逻辑,如果它应该在One
的逻辑执行后执行Two
的动作。