在 C# 中,Timer 类可以用于在不同情况下定时执行代码。常见的 Timer 类有三种主要用法,分别由不同的命名空间提供:
System.Timers.Timer
System.Threading.Timer
System.Windows.Forms.Timer(主要用于 Windows 窗体应用程序)
1,System.Timers.Timer System.Timers.Timer 提供了基础定时功能,可以在控制台应用程序或后台服务中使用。
using System;
using System.Timers;
class Program
{
private static Timer aTimer;
static void Main()
{
// 创建一个定时器,间隔设置为2000毫秒(2秒)
aTimer = new Timer(2000);
// 绑定Elapsed事件的处理方法
aTimer.Elapsed += OnTimedEvent;
// 设置定时器是否重复
aTimer.AutoReset = true;
// 启动定时器
aTimer.Enabled = true;
Console.WriteLine("按 Enter 键退出程序...");
Console.ReadLine();
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime);
}
}
2. System.Threading.Timer System.Threading.Timer 提供了一个更低级别的定时器,可以处理多线程环境中的回调。
using System;
using System.Threading;
class Program
{
private static Timer timer;
static void Main()
{
// 创建一个定时器,间隔设置为2000毫秒(2秒),回调方法是ShowTimeEvent
timer = new Timer(ShowTimeEvent, null, 0, 2000);
Console.WriteLine("按 Enter 键退出程序...");
Console.ReadLine();
// 释放定时器资源
timer.Dispose();
}
private static void ShowTimeEvent(Object state)
{
Console.WriteLine("The Timer callback was raised at {0:HH:mm:ss.fff}", DateTime.Now);
}
}
3. System.Windows.Forms.Timer System.Windows.Forms.Timer 是专为 Windows 窗体应用程序设计的,它的回调是在 Windows 消息循环中处理的,因此更适合更新用户界面。
using System;
using System.Windows.Forms;
public class TimerExample : Form
{
private Timer timer;
public TimerExample()
{
// 创建一个定时器,间隔设置为2000毫秒(2秒)
timer = new Timer();
timer.Interval = 2000;
// 绑定Tick事件的处理方法
timer.Tick += new EventHandler(OnTimedEvent);
// 启动定时器
timer.Start();
}
private void OnTimedEvent(Object myObject, EventArgs myEventArgs)
{
// 更新用户界面
this.Text = "Updated at " + DateTime.Now.ToString();
}
[STAThread]
static void Main()
{
Application.Run(new TimerExample());
}
}
注意事项
**System.Timers.Timer 和 System.Threading.Timer 的回调方法在不同的线程上执行,因此在访问共享资源时需要小心处理线程同步问题。
System.Windows.Forms.Timer 的回调方法在同一个线程上执行(通常是 UI 线程),因此可以直接更新 UI 元素而无需担心线程冲突。
根据具体应用场景选择合适的 Timer 实现,例如在后台服务中更推荐使用 System.Timers.Timer 或 System.Threading.Timer,而在 Windows 窗体应用程序中则更适合使用 System.Windows.Forms.Timer。**