簡體   English   中英

如何在C#中的每個特定時間間隔觸發事件?

[英]How to trigger an event every specific time interval in C#?

計時器需要作為一個線程運行,它將在每個固定的時間間隔內觸發一個事件。 我們怎樣才能在c#中做到這一點?

這是一個簡短的片段,每隔10秒打印一條消息。

using System;
public class AClass
{
    private System.Timers.Timer _timer;
    private DateTime _startTime;

    public void Start()
    {
        _startTime = DateTime.Now;
        _timer = new System.Timers.Timer(1000*10); // 10 seconds
        _timer.Elapsed += timer_Elapsed;
        _timer.Enabled = true;
        Console.WriteLine("Timer has started");
    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        TimeSpan timeSinceStart = DateTime.Now - _startTime;
        string output = string.Format("{0},{1}\r\n", DateTime.Now.ToLongDateString(), (int) Math.Floor( timeSinceStart.TotalMinutes));
        Console.Write(output);
    }
}

使用可用的多個計時器之一。 Systme.Timer作為通用的,還有其他人依賴於UI技術:

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer
  • System.Web.UI.Timer
  • System.Windows.Threading.DispatcherTimer

你可以檢查為什么.NET中有5個定時器類的版本? 解釋差異。

如果你需要具有mroore精度(低至1毫秒)的東西你使用原生計時器 - 但這需要一些互操作編碼(或對谷歌的一個非常基本的理解)。

您可以使用System.Timers.Timer

嘗試這個:

class Program
{
    static System.Timers.Timer timer1 = new System.Timers.Timer();
    static void Main(string[] args)
    {
        timer1.Interval = 1000;//one second
        timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
        timer1.Start();
        Console.WriteLine("Press \'q\' to quit the sample.");
        while (Console.Read() != 'q') ;
    }
    static private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e)
    {
        //do whatever you want 
        Console.WriteLine("I'm Inside Timer Elapsed Event Handler!");
    }
}

我更喜歡使用Microsoft的Reactive Framework(NuGet中的Rx-Main)。

var subscription =
    Observable
        .Interval(TimeSpan.FromSeconds(1.0))
        .Subscribe(x =>
        {
            /* do something every second here */
        });

並在不需要時停止計時器:

subscription.Dispose();

超級簡單!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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