首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止System.Timers.Timer

停止System.Timers.Timer
EN

Stack Overflow用户
提问于 2016-08-31 03:42:45
回答 1查看 835关注 0票数 0

假设我有这样的代码

代码语言:javascript
复制
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’的发生吗?

如果没有,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 03: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以您所描述的方式触发。您必须假设OneTwo在两个不同的线程上完全同时执行。即使调用Stop()也不能保证阻止计时器触发额外的时间:https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx

我的建议是,如果分支逻辑在One中的逻辑执行之后,它应该在Two中执行操作,则使用单个回调来处理分支逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39235876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档