[英]Timer elapsed event firing twice in C# command line program
程序啟動時,我的計時器“Elapsed”事件會觸發兩次。 'Elapsed' 事件處理程序的唯一分配是在 'Main' 方法中。 有什么我做錯了嗎?
//class level clock
public static System.Timers.Timer Clock;
static void Main(string[] args)
{
Clock = new System.Timers.Timer();
Clock.Elapsed += new ElapsedEventHandler(Clock_Elapsed);
Clock.AutoReset = false;
Clock.Interval = timerInterval; //this needs to be in milliseconds!
Clock.Enabled = true;
//run infinite loop until q is pressed
while (Console.Read() != 'q')
{}
}
static void Clock_Elapsed(object sender, ElapsedEventArgs e)
{
Clock.Stop();
//do some stuff
Clock.Start();
}
更新:
@fparadis2 提供的 AutoReset 修復了兩次觸發。 基本問題是我的計時器間隔設置為 30 毫秒而不是 30000 毫秒(30 秒),因此事件是雙重觸發的。
如果 timerInverval 足夠小,則在您有機會停止時鍾之前,Elapsed 事件可能會被觸發兩次。 你應該做
Clock.AutoReset = false;
以便每次啟動計時器時僅收到一次通知。
如果 Elapsed 事件的處理持續時間超過 Interval,則可能會在另一個 ThreadPool 線程上再次引發該事件。 在這種情況下,事件處理程序應該是可重入的。
您也可以考慮檢查此模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.