当前位置: 首页 > article >正文

C# 中Timer的三种用法

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


http://www.kler.cn/a/406356.html

相关文章:

  • VMware Workstation 17.6.1
  • 51c大模型~合集76
  • 华三(H3C)T1020 IPS服务器硬件监控指标解读
  • uniapp发布android上架应用商店权限
  • 核间通信-Linux下RPMsg使用与源码框架分析
  • 3.langchain中的prompt模板 (few shot examples in chat models)
  • 代码随想录1016-Day17
  • 【bug】python常见的错误以及解决办法
  • 大数据环境下的高效数据清洗策略
  • 【信息系统项目管理师】第2章:信息技术发展 考点梳理
  • 泥石流灾害风险评估与模拟丨AI与R语言、ArcGIS、HECRAS融合,提升泥石流灾害风险预测的精度和准确性
  • CSS遮罩:mask
  • 使用minio cllient(mc)完成不同服务器的minio的数据迁移和mc基本操作
  • stm32 指定变量存储地址
  • 利用Python爬虫获取1688搜索词推荐:技术与实践
  • P1308 [NOIP2011 普及组] 统计单词数题解
  • [开源重构]Search(Elasticsearch/OpenSearch) Sync Tool
  • c++基础语法
  • shell脚本(三)
  • Java教程:SE进阶【十万字详解】(中)
  • 移动语义和拷贝语义的区别以及智能指针
  • 数据结构--并查集
  • 比rsync更强大的文件同步工具rclone
  • 解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
  • 半导体工艺与制造篇5 光刻
  • 40分钟学 Go 语言高并发:并发下载器开发实战教程