C# 中Timer的三种用法

embedded/2024/11/23 12:37:49/

在 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秒),回调方法是ShowTimeEventtimer = 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.ppmy.cn/embedded/139847.html

相关文章

JavaScript数据类型判断

在 JavaScript 中,可以通过多种方式来判断数据类型,以下是常用的几种方法: 1. typeof 操作符 typeof 用于判断基本数据类型和部分对象类型。 console.log(typeof 123); // "number" console.log(typeof "hello"); // &…

android 动画原理分析

一 android 动画分为app内的view动画和系统动画 基本原理都是监听Choreographer的doframe回调 二 app端的实现是主要通过AnimationUtils来实现具体属性的变化通过invilate来驱动 wms来进行更新。这个流程是在app进程完成 这里不是我分析的重点 直接来看下系统动画里面的本地动…

【C++】拆分详解 - 多态

文章目录 一、概念二、定义和实现1. 多态的构成条件2. 虚函数2.1 虚函数的重写/覆盖2.2 虚函数重写的两个例外 3. override 和 final关键字4. 重载/重写/隐藏的对比5. 例题 三、纯虚函数和抽象类四、多态的原理1. 虚函数表2. 实现原理3. 动态绑定和静态绑定 总结 一、概念 多态…

skywalking es查询语句整理

查找特定时间范围内,与特定服务相关的service_relation_server_side指标 {"size": 0,"query": {"bool": {"must": [{"range": {"time_bucket": {"from": 202411221112,"to": 2024…

jmeter操作数据库

简介 Apache JMeter 是一个强大的开源工具,用于负载测试和性能测量。除了Web应用外,JMeter还可以用于测试各种数据库系统,包括MySQL。本文将详细介绍如何使用JMeter来测试MySQL数据库的性能。 环境准备 安装Java:确保你已经安装…

Notepad++--在开头快速添加行号

原文网址:Notepad--在开头快速添加行号_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad怎样在开头快速添加行号。 需求 原文件 想要的效果 方法 1.添加点号 Alt鼠标左键,从首行选中首列下拉,选中需要添加序号的所有行的首列&#xff…

数字IC后端笔试面试题库 | 经典时序Timing计算题

今天小编给大家分享下近几年IC后端笔试题目中关于时序计算的典型真题。只要把这些题目搞懂,无论是校招还是社招,时序方面的题都没有问题了。 数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析 数字IC后端工程师应该如何快速入门提高工作…

垂起固定翼无人机搭载高清三光(4K可见+红外+激光测距)吊舱图像采集技术详解

垂起固定翼无人机搭载高清三光(4K可见红外激光测距)吊舱图像采集技术,是一种结合了无人机技术与先进光学传感技术的综合解决方案。以下是对该技术的详细解析: 一、垂起固定翼无人机 1. 特点: 垂直起降能力&#xff1…