C#定时器中的System.Timers.Timer详解

 更新时间:2026年02月03日 17:11:21   作者:ByteGeek‌  
System.Timers.Timer 是 .NET 框架中用于创建基于时间间隔的定时器类,它属于 System.Timers 命名空间,这篇文章给大家介绍了C#定时器中的System.Timers.Timer相关知识,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

System.Timers.Timer 是 .NET 框架中用于创建基于时间间隔的定时器类,它属于 System.Timers 命名空间。这个定时器类设计用于多线程环境中的服务器或服务组件,没有用户界面,在运行时不可见。

核心特性

‌事件驱动模型‌: System.Timers.Timer 通过 Elapsed 事件来通知定时器已经过了指定的时间间隔。当定时器到达设定的时间间隔时,会引发 Elapsed 事件。
‌多线程执行‌: 该定时器在 ThreadPool 线程上运行,适用于后台任务处理。它可以在一定时间间隔内重复执行任务。
‌自动重置功能‌: 通过 AutoReset 属性控制是否重复触发事件。当 AutoReset 设置为 true 时,定时器会持续重复执行;设置为 false 时,只在第一次时间间隔后触发一次。

主要属性

● ‌Interval‌:设置定时器触发事件的时间间隔(单位为毫秒)
● ‌AutoReset‌:控制定时器是否重复触发事件
● ‌Enabled‌:控制定时器是否启用

使用示例

案例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using Timer = System.Timers.Timer;
namespace ConsoleTest
{
    internal class Program
    {
        private static Timer backgroundTimer;
        private static int taskCounter = 0;
        private static bool isRunning = false;
        static void Main(string[] args)
        {
            Console.WriteLine("System.Timers.Timer 使用案例");
            Console.WriteLine("============================");
            // 创建定时器,每3秒执行一次
            backgroundTimer = new Timer(3000);
            backgroundTimer.Elapsed += OnTimerElapsed;
            backgroundTimer.AutoReset = true;
            // 启动定时器
            backgroundTimer.Enabled = true;
            isRunning = true;
            Console.WriteLine("定时器已启动,每3秒执行一次后台任务");
            Console.WriteLine("输入 'stop' 停止定时器,输入 'exit' 退出程序");
            while (true)
            {
                string input = Console.ReadLine();
                if (input?.ToLower() == "stop")
                {
                    StopTimer();
                }
                else if (input?.ToLower() == "exit")
                {
                    break;
                }
            }
            // 清理资源
            StopTimer();
            backgroundTimer.Dispose();
            Console.WriteLine("程序结束");
        }
        private static void OnTimerElapsed(object source, ElapsedEventArgs e)
        {
            taskCounter++;
            Console.WriteLine($"[后台任务 {taskCounter}] 执行时间: {e.SignalTime:yyyy-MM-dd HH:mm:ss}");
            // 模拟一些后台工作
            PerformBackgroundWork();
        }
        private static void PerformBackgroundWork()
        {
            try
            {
                // 模拟耗时操作
                Thread.Sleep(1000);
                Console.WriteLine($"[后台任务 {taskCounter}] 工作完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[错误] 后台任务执行出错: {ex.Message}");
            }
        }
        private static void StopTimer()
        {
            if (isRunning)
            {
                backgroundTimer.Enabled = false;
                isRunning = false;
                Console.WriteLine("定时器已停止");
            }
        }
    }
}

与其他定时器的区别

System.Timers.Timer 与 System.Threading.Timer 和 System.Windows.Forms.Timer 相比,具有以下特点:
● ‌System.Timers.Timer‌: 定期触发事件,类旨在用作多线程环境中的基于服务器或服务组件;它没有用户界面,在运行时不可见(不可以直接更新UI界面)
● ‌System.Threading.Timer‌: 定期在线程池线程上执行单个回调方法(不可以直接更新UI界面)
● ‌System.Windows.Forms.Timer‌: 一种 Windows 窗体组件,按固定时间间隔触发事件(可以直接更新UI界面)

到此这篇关于C#中定时器中的System.Timers.Timer详解的文章就介绍到这了,更多相关C# 定时器System.Timers.Timer内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#调用执行外部程序的实现方法

    C#调用执行外部程序的实现方法

    这篇文章主要介绍了C#调用执行外部程序的实现方法,涉及C#进程调用的相关使用技巧,非常简单实用,需要的朋友可以参考下
    2015-04-04
  • C# 多线程并发编程基础小结

    C# 多线程并发编程基础小结

    本文主要介绍了C# 多线程并发编程基础小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • C# Unity使用正则表达式去除部分富文本的代码示例

    C# Unity使用正则表达式去除部分富文本的代码示例

    正则表达式在我们日常开发中的用处不用多说了吧,下面这篇文章主要给大家介绍了关于C# Unity使用正则表达式去除部分富文本的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • 解决winform界面刷新闪烁问题的多种方案

    解决winform界面刷新闪烁问题的多种方案

    这篇文章给大家介绍了如何解决winform界面刷新闪烁问题的多种方案,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • 一个进程间通讯同步的C#框架引荐

    一个进程间通讯同步的C#框架引荐

    这篇文章主要介绍了一个进程间通讯同步的C#框架,代码具有相当的稳定性和可维护性,随着.NET的开源也会被注入更多活力,推荐!需要的朋友可以参考下
    2015-07-07
  • C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    这篇文章主要介绍了C#实现压缩和解压缩的方法,结合具体实例形式分析了Gzip和Zip两种压缩操作实现方法,需要的朋友可以参考下
    2017-06-06
  • C# MVC 使用LayUI实现下拉框二级联动的功能

    C# MVC 使用LayUI实现下拉框二级联动的功能

    这篇文章主要介绍了C# MVC 如何使用LayUI实现下拉框二级联动,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#实现学员信息管理系统

    C#实现学员信息管理系统

    这篇文章主要为大家详细介绍了C#实现学员信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C#反序列化到类的实现方法

    C#反序列化到类的实现方法

    这篇文章主要介绍了C#反序列化到类的实现方法,涉及C#反序列化的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#通过Semaphore类控制线程队列的方法

    C#通过Semaphore类控制线程队列的方法

    这篇文章主要介绍了C#通过Semaphore类控制线程队列的方法,涉及Semaphore类操作线程队列的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论