[英]C# System.Timers.Timer auto-shutdown?
我有一個啟動計時器,並在它自己的線程中無限期地工作,直到主線程中發生某些事情來禁用它,在這種情況下,將啟用另一個計時器。 這很完美。 唯一的問題是我要完全確保第二個計時器不會運行太長時間。
如果由於某些故障而未收到特定的關機命令,有沒有辦法使計時器在10分鍾后自動禁用?
我看到該類具有InitializeLifetimeService方法。 聽起來可能有幫助,但我不知道如何工作。
謝謝大家和加爾斯:)
為什么不讓它在每次迭代時都向全局變量+1(例如,是否每秒滴答一次),讓計時器每隔一個滴答檢查一次變量,一旦var達到600,就告訴計時器禁用自身。
只需聲明一個Class變量,然后在將計時器啟動到DateTime.Now時將其設置即可。 然后將其包含在您的計時器中:
DateTime time = DateTime.Now;
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0)
{
timer1.Stop();
}
// timer code
}
在給定時間后啟動第二個計時器以將其禁用時,您可以考慮啟動第三個計時器。
Timer t1 = new Timer(1000); // fire every second
Timer t2 = new Timer(60000); // fire after 10 minutes
t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed
t1.Start();
t2.Start();
上面的示例順便使用了System.Timers.Timer 。 如果您使用的是System.Threading.Timer,那么您可能還會考慮在其中進行足夠多的切換,以使System.Timers.Timer本質上具有線程安全性,而System.Threading.Timer則不是。
可以在這里找到很好的概述: http : //msdn.microsoft.com/zh-cn/magazine/cc164015.aspx
編輯為清晰起見:
t2.Elapsed += (e, o) => t1.Stop();
也可以寫成
t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);
其次是
void t2_Elapsed(object sender, ElapsedEventArgs e)
{
t1.Stop();
}
這是在Visual Studio中按Ctrl + Space時實際得到的結果,前提是您可以使用下部方法訪問t1。
分配經過的事件處理程序和全局布爾值
Private Boolean eOccured = False;
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 600000; //milliseconds(10 min)
aTimer.Enabled = True;
...如果成功,代碼會激活bool ...
然后在事件觸發時停止計時器。
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
If (eOccured)
{
aTimer.Stop();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.