我有一個定時器,它會在它自己的線程中無限期地開始工作,直到在主線程中發生某些事情來禁用它,在這種情況下將啓用不同的定時器。這工作完美。唯一的問題是我想完全確定第二個定時器不會運行太久。C#System.Timers.Timer自動關閉?
如果由於某些故障而沒有收到特定的關機命令,例如10分鐘後,是否有辦法讓計時器自動禁用?
我看到該類有InitializeLifetimeService方法。這聽起來像可以幫助,但我不知道如何工作。
感謝球員和加爾斯:)
我有一個定時器,它會在它自己的線程中無限期地開始工作,直到在主線程中發生某些事情來禁用它,在這種情況下將啓用不同的定時器。這工作完美。唯一的問題是我想完全確定第二個定時器不會運行太久。C#System.Timers.Timer自動關閉?
如果由於某些故障而沒有收到特定的關機命令,例如10分鐘後,是否有辦法讓計時器自動禁用?
我看到該類有InitializeLifetimeService方法。這聽起來像可以幫助,但我不知道如何工作。
感謝球員和加爾斯:)
當您啓動第二個給定的時間後,可以禁用它你可以考慮開始第三定時器。
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/en-us/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 +空格時實際獲得的內容,因爲您可以在較低方法中訪問t1。
你爲什麼不讓它把+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
}
分配一個經過事件處理程序和全球布爾
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();
}
}
你能咀嚼第3行的語法嗎?我不確定我瞭解它是如何工作的。 – 2012-03-30 09:05:11
我在上面插入了一個解釋... - 註釋中的代碼有點乏味...... – ChriPf 2012-03-30 09:18:13