假设我有这样的代码
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‘中的计时器会阻止'Two’的发生吗?
如果没有,我该怎么做呢?
发布于 2016-08-30 19:54:19
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
中执行操作,则使用单个回调来处理分支逻辑。
https://stackoverflow.com/questions/39235876
复制相似问题