如何获得计时器事件以一次触发一个计时器事件。例如,我有一个计时器,每10分钟引发一次事件。 引发的事件需要10分钟或更长时间才能完成执行。 我希望计时器在事件结束后重置。 换句话说,我不想在任何时候举办一次以上的活动。如何在C#中只引发1个Timer事件?
3
A
回答
6
通常我做的是有我的事件停止计时器时,它的提出,然后在事件过程完成重新启动定时器:
private void timerHandler(object sender, TimerElapsedEventArgs e)
{
Timer timer = (Timer)sender;
timer.Stop();
RunProcess();
timer.Start();
}
public void RunProcess()
{
/* Do stuff that takes longer than my timer interval */
}
现在我的计时器将再次对过程
14
完成启动
使用System.Timers.Timer不是线程的一个
将AutoReset设置为false。
然后当你完成后再次启动它。
+0
对于'MyTimer.AutoReset = false'为+1。否则有人可能会忘记手动管理'Start()'和'Stop()'调用。 – 2010-08-04 20:19:51
+2
我不明白为什么手动停止/开始获得更多选票 – 2012-02-02 20:04:32
0
可能很难停止定时器的效率或逻辑。以下代码同步跳过事件。
static readonly object key = new object();
void TimerHandler(object sender, TimerElapsedEventArgs e)
{
if(Monitor.TryEnter(key))
{
try
{
//do your stuff
}
finally
{
Montitor.Exit(key);
}
}
}
相关问题
- 1. 当引发Timer事件时,Windows服务如何启动进程?
- 2. C#引发事件
- 3. 如何获取Timer Elapsed事件中发生的异常?
- 4. 如何引用在C#中的事件
- 5. 如何接收在vb中引发的c#事件?
- 6. C#:多事件引发
- 7. 如何在C中发送事件#
- 8. 如何获取Timer Tick事件以中断另一个函数C++/CLI
- 9. 在C中使用Timer触发动作#
- 10. 如何触发只有在JQuery中匹配2个事件?
- 11. 如何在Delphi中创建一个事件只发生一次?
- 12. 如何在.NET中引发事件查看器“事件”?
- 13. 如何在所谓的事件中找到哪个控件引发了一个事件? Visual C#
- 14. 在ASP.NET C#中自动引发事件发送电子邮件
- 15. PowerPoint.Application不会引发C中的事件#
- 16. 事件只会引发一次?
- 17. 如何在AS3中为Timer事件和Mouse事件使用相同的函数?
- 18. C#如何在Timer.Tick事件上引发PostBack?
- 19. 如何通过.NET/C#中的反射来引发事件?
- 20. c#从另一个类中的另一个静态事件引发事件
- 21. facebook c#sdk async GetCompleted,为什么只有1个事件?
- 22. 在C中转发事件#
- 23. 如何用1个选择器触发2个事件?
- 24. jquery:如何在事件发生时产生3个短语中的1个
- 25. 使c#/ wpf事件只触发一次?
- 26. 如何在新事件写入时引发事件?
- 27. 如何在Objective C中创建一个计数Timer?
- 28. 短命环境中的Activiti Timer事件
- 29. C# - 如何对另一个类中引发的事件作出反应?
- 30. 发送多个附件PHP imap只发送1个附件
这不会引入竞争条件(http://msdn.microsoft.com/en-us/library/system.timers.timer.stop.aspx)这不是AutoReset解决方案的问题? – Jon 2012-04-18 05:57:29