如何獲得計時器事件以一次觸發一個計時器事件。例如,我有一個計時器,每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. 如何引用在C#中的事件
- 6. 在Form_Load事件(VB.NET)之前觸發了Timer事件標記
- 7. 在JQuery中只觸發一個事件
- 8. 如何接收在vb中引發的c#事件?
- 9. C#:多事件引發
- 10. 如何在C中發送事件#
- 11. 如何獲取Timer Tick事件以中斷另一個函數C++/CLI
- 12. 在C中使用Timer觸發動作#
- 13. 如何在C++中創建Timer任務?
- 14. 如何在C中使用Timer#
- 15. 如何觸發只有在JQuery中匹配2個事件?
- 16. 如何在Delphi中創建一個事件只發生一次?
- 17. 如何在所謂的事件中找到哪個控件引發了一個事件? Visual C#
- 18. 如何在.NET中引發事件查看器「事件」?
- 19. 在C++/cli dll中引發事件並在c中消耗
- 20. 在ASP.NET C#中自動引發事件發送電子郵件
- 21. PowerPoint.Application不會引發C中的事件#
- 22. 如何在C#中引發一個靜態事件線程安全?
- 23. C++ WinInet只發出1個請求
- 24. 如何在線程中使用Timer Elapsed事件
- 25. 事件只會引發一次?
- 26. 如何在AS3中爲Timer事件和Mouse事件使用相同的函數?
- 27. 如何通過.NET/C#中的反射來引發事件?
- 28. C#如何在Timer.Tick事件上引發PostBack?
- 29. jQuery單擊事件觸發多個元素(我只想要1)
- 30. c#從另一個類中的另一個靜態事件引發事件
這不會引入競爭條件(http://msdn.microsoft.com/en-us/library/system.timers.timer.stop.aspx)這不是AutoReset解決方案的問題? – Jon 2012-04-18 05:57:29