.NET 中的新 Timer 類別
以往講到 Timer,大家可能會想到 WinForm 上的,以前在寫 WinForm 程式它真的很好用,可惜如果是寫 Console 或 Web,它不能直接拿來用。但新版本的 .NET 重新加了一個 System.Timers.Timer
。
它的設定也很直覺,程式碼如下:
public class TimerClass
{
private System.Timers.Timer _timer;
public TimerClass()
{
_timer = new System.Timers.Timer(500);
_timer.Elapsed += _timer_Elapsed;
_timer.AutoReset = true;
_timer.Enabled = true;
}
int count = 10;
private void _timer_Elapsed(object? sender, ElapsedEventArgs e)
{
if(count > 0)
{
Console.WriteLine("_timer_Elapsed");
}
else
{
_timer.Enabled = false;
Console.WriteLine("End");
}
--count;
}
}
類別在宣告後就會自動執行 _timer_Elapsed
10次後停止,而如果要執行非同步程式,修改如下:
public class TimerClass
{
private System.Timers.Timer _timer;
public TimerClass()
{
_timer = new System.Timers.Timer(500);
_timer.AutoReset = true;
_timer.Enabled = true;
_timer.Elapsed += async ( sender, e ) => await HandleTimer(sender, e);
}
int count = 10;
private async Task HandleTimer(object? sender, ElapsedEventArgs e)
{
if (count > 0)
{
Console.WriteLine("Async Task");
}
else
{
_timer.Enabled = false;
Console.WriteLine("End");
}
--count;
await Task.Delay(500);
}
}
參考資料