[英]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技術:
你可以檢查為什么.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.