在 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。**

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部