簡體   English   中英

C#System.Timers.Timer自動關閉?

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

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