簡體   English   中英

在 C# 命令行程序中定時器已用事件觸發兩次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM