停止系统.计时器.计时器

本文关键字:计时器 系统 | 更新日期: 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像你描述的那样开火。必须假设OneTwo在两个不同的线程上同时执行。即使调用Stop()也不能保证防止计时器触发额外的时间:https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx.

我的建议是有一个回调处理分支逻辑,如果它应该在One的逻辑执行后执行Two的动作。