它们都可以用于在指定时间间隔后执行代码。然而,它们在实现和用法上有一些差异。

System.Threading.Timer:

System.Threading.Timer 是基于线程的定时器,它属于 System.Threading 命名空间。它使用 ThreadPool 线程来执行定时操作。以下是关于 System.Threading.Timer 的一些重要特点:

构造函数:Timer(TimerCallback callback, object state, int dueTime, int period)

TimerCallback 是一个委托,它指向要定时执行的方法。state 是传递给回调方法的对象参数。

dueTime 表示创建定时器后首次执行回调方法的延迟时间(以毫秒为单位)。

period 表示回调方法的执行间隔(以毫秒为单位)。如果将其设置为 0,它只会在 dueTime 后执行一次。

示例:

using System;
using System.Threading; class Program
{
static void Main()
{
TimerCallback callback = DoSomething;
Timer timer = new Timer(callback, null, 0, 1000); Console.WriteLine("Press any key to stop the timer.");
Console.ReadKey(); // Dispose the timer to stop it properly.
timer.Dispose();
} static void DoSomething(object state)
{
Console.WriteLine("Doing something...");
}
}

System.Timers.Timer:

System.Timers.Timer 是基于事件的定时器,它属于 System.Timers 命名空间。它使用基于底层计时器的实现,而不是线程池线程。以下是关于 System.Timers.Timer 的一些重要特点:

构造函数:Timer(double interval)

interval 表示定时器的执行间隔(以毫秒为单位)。

示例:

using System;
using System.Timers; class Program
{
static void Main()
{
Timer timer = new Timer(1000); // 1 second interval
timer.Elapsed += Timer_Elapsed;
timer.Start(); Console.WriteLine("Press any key to stop the timer.");
Console.ReadKey(); timer.Stop();
timer.Dispose();
} private static void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Doing something...");
}
}

2 / 2

在 C# 中,有两种常用的定时器类,分别是 System.Threading.Timer 和 System.Timers.Timer,它们都可以用于在指定时间间隔后执行代码。然而,它们在实现和用法上有一些差异。

System.Threading.Timer:

System.Threading.Timer 是基于线程的定时器,它属于 System.Threading 命名空间。它使用 ThreadPool 线程来执行定时操作。以下是关于 System.Threading.Timer 的一些重要特点:

构造函数:Timer(TimerCallback callback, object state, int dueTime, int period)

TimerCallback 是一个委托,它指向要定时执行的方法。state 是传递给回调方法的对象参数。

dueTime 表示创建定时器后首次执行回调方法的延迟时间(以毫秒为单位)。

period 表示回调方法的执行间隔(以毫秒为单位)。如果将其设置为 0,它只会在 dueTime 后执行一次。

示例:

csharp

Copy code

using System;

using System.Threading;

class Program

{

static void Main()

{

TimerCallback callback = DoSomething;

Timer timer = new Timer(callback, null, 0, 1000);

    Console.WriteLine("Press any key to stop the timer.");
Console.ReadKey(); // Dispose the timer to stop it properly.
timer.Dispose();
} static void DoSomething(object state)
{
Console.WriteLine("Doing something...");
}

}

System.Timers.Timer:

System.Timers.Timer 是基于事件的定时器,它属于 System.Timers 命名空间。它使用基于底层计时器的实现,而不是线程池线程。以下是关于 System.Timers.Timer 的一些重要特点:

构造函数:Timer(double interval)

interval 表示定时器的执行间隔(以毫秒为单位)。

示例:

csharp

Copy code

using System;

using System.Timers;

class Program

{

static void Main()

{

Timer timer = new Timer(1000); // 1 second interval

timer.Elapsed += Timer_Elapsed;

timer.Start();

    Console.WriteLine("Press any key to stop the timer.");
Console.ReadKey(); timer.Stop();
timer.Dispose();
} private static void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Doing something...");
}

}

差异总结:

实现方式:

System.Threading.Timer 使用 ThreadPool 线程执行定时操作。

System.Timers.Timer 使用基于底层计时器的实现。

精度:

System.Threading.Timer 相对精确,但受到线程池的限制,可能会有轻微的延迟。

System.Timers.Timer 提供更高的精确度。

回调方法:

System.Threading.Timer 使用 TimerCallback 委托来执行回调方法。

System.Timers.Timer 使用事件模型(Elapsed 事件)来执行回调方法。

线程安全性:

System.Threading.Timer 需要开发人员自行处理可能出现的线程同步问题。

System.Timers.Timer 本身是线程安全的,因为它使用了基于事件的模型。

根据需要选择合适的定时器类,如果需要更高的精确度和线程安全性,可以优先考虑 System.Timers.Timer。但请注意,当执行回调方法较为复杂或耗时时,任何定时器都可能受到回调方法本身执行时间的影响,所以在选择定时器时,也要结合实际场景进行评估。

C# system.Threading.Timer和system.Timers中的定时器的更多相关文章

  1. System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法

    System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,但是另外两个没有这个情况,System.Timers.Timer.System.Th ...

  2. System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用

    System.Windows.Forms.Timer.System.Timers.Timer.System.Threading.Timer的 区别和用法http://space.itpub.net/1 ...

  3. C# 计时器用法(DispatcherTimer、System.Timers.Timer、System.Threading.Timer)

    首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程. Disp ...

  4. C# System.Threading.Timer 详解及示例

    前言 定时器功能在日常开发中也是比较常用的,在 .Net 中实际上总共有五种定时器,分别是:System.Timers.Timer.System.Threading.Timer.System.Wind ...

  5. System.Threading.Timer的使用技巧

    转自:http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml# System.Threading.Timer timer = ...

  6. .NET中System.Diagnostics.Stopwatch、System.Timers.Timer、System.Threading.Timer 的区别

    1.System.Diagnostics.Stopwatch Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间. 在典型的 Stopwatch 方案中,先调用 ...

  7. System.Threading.Timer 定时器的用法

    System.Threading.Timer 是C# 中的一个定时器,可以定时(不断循环)执行一个任务.它是在线程上执行的,具有很好的安全性.为此  .Net Framework 提供了5个重载的构造 ...

  8. c# 多线程之-- System.Threading Timer的使用

    作用:每隔多久去执行线程里的方法. class ThreadTimerDemo { static void Main(string[] args) { // Create an AutoResetEv ...

  9. System.Threading.Timer使用心得

    System.Threading.Timer 是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高. "只要在使用 Timer,就必须保留对它的引用."对于任何托 ...

  10. System.Threading.Timer如何正确地被Dispose

    System.Threading.Timer是.NET中一个定时触发事件处理方法的类(本文后面简称Timer),它背后依靠的是.NET的线程池(ThreadPool),所以当Timer在短时间内触发了 ...

随机推荐

  1. pnpm 安装和使用

    1. 简介 Fast, disk space efficient package manager: Fast. Up to 2x faster than the alternatives (see b ...

  2. 【攻防世界】BadProgrammer

    BadProgrammer(原型链污染) 题目来源 攻防世界 NO.GFSJ0986 题目描述 打开网址页面如下,没有什么有用信息 用dirsearch扫一下目录,发现/static../(用御剑扫不 ...

  3. SQL SERVER日常运维巡检系列之-性能

    前言 做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期.结果进行登记,同时可能需要出一份巡检报告. 本系列旨在解决一些常见的困扰: 不知道巡检哪些东西 不知道怎么样便捷体检 机器太多体 ...

  4. Can't find PHP headers in /usr/include/php The php-devel package is required for use of this command.

    报错 phpize 编译扩展时,报错:Can't find PHP headers in /usr/include/php The php-devel package is required for ...

  5. 无法解析@NotBlank

    当碰到无法解析的时候,一般都是地址写错了,找不到相应的路劲 我是全局能搜到这个包@NotBlank,在jakarta.validation-api包里面,但是我网上搜https://www.cnblo ...

  6. 查看docker服务状态

    root用户使用 #查看docker服务状态: systemctl status docker 非root用户使用 #查看docker服务: sudo systemctl status docker

  7. HackTheBox-Linux-Brainfuck

    brainfuck 一.攻击流程: 使用nmap进行探测开放端口和服务. sudo nmap --min-rate=1000 -sT -sC -sV [target] 通过上图可以看出,有22端口的s ...

  8. DRG,医改分水岭!

    2020-11-04 (2021年政府推出2.0版DRG.增加MCC和CC,各自政府的医保支付中增加了人性化的支付倍率的处理) 假设某疾病病组支付标准10000元,患者自付自费比例40%,分三种情况, ...

  9. 修显示器led屏幕能亮但是显示异常

    用电吹风热风大风   对着显示器的  ' led 区域 '  吹十分钟 吹显示器线插口 电源线 插口 机箱    断电吹  // 温度挺高  还得吹显卡接口 线也要换新的 插口需要用线的接口 打磨金属 ...

  10. 干货分享!MCP 实现原理,小白也能看懂

    不知道大家有没有发现?对于添加到 MCP 服务市场的成千上万个 MCP 服务(而且这个数字每天还在增加),我们可以不写一行代码,轻松实现调用,但背后的原因究竟是啥呢? MCP 虽然用起来很方便,但搞不 ...