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

探索.NET中的定时器:选择最适合你的应用场景

概述:.NET提供多种定时器,如
System.Windows.Forms.Timer适用于UI,System.Web.UI.Timer用于Web,System.Diagnostics.Timer用于性能监控,System.Threading.Timer和System.Timers.Timer用于一般定时任务。在.NET 6及以上,还有更直观的System.Threading.PeriodicTimer。选择合适的定时器,提升应用性能和用户体验。

今天看到一网友聊.net中的定时器,我也把我知道和大家分享一下。 在.NET中,有多种定时器的实现,每一种都有其特定的应用场景和特点。下面将分别介绍这几种定时器,并提供相应的实例源代码。

1. System.Windows.Forms.Timer

应用场景: 适用于Windows Forms应用程序中需要与UI线程交互的场景。

特点: 在UI线程中工作,可以直接访问和操作UI控件。

实例:

using System;
using System.Windows.Forms;public class MainForm : Form
{private Timer timer;public MainForm(){// 创建定时器,每秒触发一次timer = new Timer();timer.Interval = 1000;timer.Tick += TimerTick;// 启动定时器timer.Start();}private void TimerTick(object sender, EventArgs e){// 在UI线程中更新UIlabel1.Text = "定时器触发时间:" + DateTime.Now;}static void Main(){Application.Run(new MainForm());}
}

2. System.Windows.Threading.DispatcherTimer

应用场景: 适用于WPF应用程序中需要与UI线程交互的场景。

特点: 基于WPF的 Dispatcher,可直接访问和操作UI控件。

实例:

using System;
using System.Windows;
using System.Windows.Threading;public partial class MainWindow : Window
{private DispatcherTimer timer;public MainWindow(){// 创建定时器,每秒触发一次timer = new DispatcherTimer();timer.Interval = TimeSpan.FromSeconds(1);timer.Tick += TimerTick;// 启动定时器timer.Start();}private void TimerTick(object sender, EventArgs e){// 在UI线程中更新UIlabel1.Content = "定时器触发时间:" + DateTime.Now.ToString("HH:mm:ss");}static void Main(){Application app = new Application();app.Run(new MainWindow());}
}

3. System.Web.UI.Timer

应用场景: 适用于ASP.NET Web应用程序中,用于在Web页面上执行定时操作。

特点: 在Web页面的服务器端运行,适用于Web Forms。

实例:

ASP.NET Web Forms中在aspx页面的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body><form id="form1" runat="server"><asp:ScriptManager runat="server" /><asp:UpdatePanel runat="server"><ContentTemplate><asp:Label ID="Label1" runat="server" Text="定时器触发时间:" /><asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="TimerTick"></asp:Timer></ContentTemplate></asp:UpdatePanel></form>
</body>
</html>

对应的代码文件 Default.aspx.cs:

using System;public partial class _Default : System.Web.UI.Page
{protected void TimerTick(object sender, EventArgs e){// 在服务器端更新UILabel1.Text = "定时器触发时间:" + DateTime.Now.ToString("HH:mm:ss");}
}

4. System.Diagnostics.Timer

应用场景: 适用于性能计数器的定时器,用于性能监控和测量。

特点: 基于性能计数器的定时器。

实例:

using System;
using System.Diagnostics;class Program
{static void Main(){// 创建定时器,每秒触发一次Timer timer = new Timer(1000);// 定时器触发事件timer.Elapsed += TimerElapsed;// 启动定时器timer.Start();// 阻止程序退出Console.ReadLine();}static void TimerElapsed(object sender, ElapsedEventArgs e){Console.WriteLine("定时器触发时间:" + e.SignalTime);}
}

5. System.Timers.Timer

应用场景: 适用于需要在一定时间间隔内重复执行任务的场景,如定时数据采集、日志记录等。

特点: 基于事件触发机制,可在多线程环境中使用,但注意处理线程同步。

实例:

using System;
using System.Timers;class Program
{static void Main(){// 创建定时器,每秒触发一次Timer timer = new Timer(1000);// 定时器触发事件timer.Elapsed += TimerElapsed;// 启动定时器timer.Start();// 阻止程序退出Console.ReadLine();}static void TimerElapsed(object sender, ElapsedEventArgs e){Console.WriteLine("定时器触发时间:" + e.SignalTime);}
}

6. System.Threading.Timer

应用场景: 适用于需要在一定时间间隔内执行任务,但不需要与UI线程交互的场景,如后台任务的调度。

特点: 基于线程池,不依赖于UI线程,需要注意线程同步和异常处理。

实例:

using System;
using System.Threading;class Program
{static void Main(){// 创建定时器,每秒触发一次Timer timer = new Timer(TimerCallback, null, 0, 1000);// 阻止程序退出Console.ReadLine();}static void TimerCallback(object state){Console.WriteLine("定时器触发时间:" + DateTime.Now);}
}

7. System.Threading.PeriodicTimer (需要.NET 6及以上版本)

应用场景: 适用于需要定期执行任务的场景,替代 System.Threading.Timer。

特点: .NET 6及以上版本引入的新型定时器,提供更直观的API和更稳定的性能。

实例:

using System;
using System.Threading;class Program
{static void Main(){// 创建定时器,每秒触发一次using (PeriodicTimer timer = new PeriodicTimer(TimeSpan.FromSeconds(1))){// 定时器触发事件timer.Elapsed += TimerElapsed;// 启动定时器timer.Start();// 阻止程序退出Console.ReadLine();}}static void TimerElapsed(object sender, EventArgs e){Console.WriteLine("定时器触发时间:" + DateTime.Now);}
}

这些定时器各自适用于不同的场景,选择合适的定时器取决于你的具体需求和应用程序类型。

在使用定时器时,请注意处理好线程同步、资源释放等问题,以确保应用程序的稳定性和性能。

相关文章:

探索.NET中的定时器:选择最适合你的应用场景

概述&#xff1a;.NET提供多种定时器&#xff0c;如 System.Windows.Forms.Timer适用于UI&#xff0c;System.Web.UI.Timer用于Web&#xff0c;System.Diagnostics.Timer用于性能监控&#xff0c;System.Threading.Timer和System.Timers.Timer用于一般定时任务。在.NET 6及以上…...

5467: 【搜索】流浪奶牛

题目描述 吃不到饭的奶牛Bessie一气之下决定离开农场&#xff0c;前往阿尔费茨山脉脚底下的农场&#xff08;听说那儿的草极其美味&#xff09;投靠她的亲戚Jimmy。但是前往目的地的山路崎岖&#xff0c;Bessie又没有吃饭&#xff0c;她需要尽量保存体力&#xff0c;以最轻松的…...

spring boot整合elasticsearch实现查询功能

第一步、添加依赖&#xff08;注意版本对应关系&#xff09;根据spring boot版本选择合适的版本 <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.6.2</version></dependenc…...

白嫖阿里云程序员日历

https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordId44f3187f7950776f494eec668a62c65f#/?utm_contentm_fission_1 「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」 打开链接直接领就行了...

ubuntu20.04搭建rtmp视频服务

1.安装软件 sudo apt-get install ffmpeg sudo apt-get install nginx sudo apt-get install libnginx-mod-rtmp 2.nginx配置 修改/etc/nginx/nginx.conf文件&#xff0c;在末尾添加&#xff1a; rtmp {server {listen 1935;application live {live on;}} } 3.视频测试 本…...

Request failed with status code 504,Gateway time out

问题描述&#xff1a; 部署在测试环境的项目在执行某功能时&#xff0c;后台程序在执行过程中&#xff0c;前端控制台在一分钟左右会报出Request failed with status code 504&#xff0c;Gateway time out异常。但是在本地开发环境会正常运行&#xff0c;并不会报出异常。 问题…...

四、Elasticsearch 进阶

自定义目录 4.1 核心概念4.1.1 索引&#xff08;Index&#xff09;4.1.2 类型&#xff08;Type&#xff09;4.1.3 文档&#xff08;Document&#xff09;4.1.3 字段&#xff08;Field&#xff09;4.1.5 映射&#xff08;Mapping&#xff09;4.1.6 分片&#xff08;Shards&#…...

海外云手机如何帮助亚马逊引流?

随着全球化的推进&#xff0c;出海企业和B2B外贸企业越来越注重海外市场的开拓&#xff0c;这已成为企业争夺市场份额的重要策略。本文将重点探讨海外云手机在优化亚马逊店铺引流方面的作用和优势。 海外云手机是一种在云端运行的虚拟手机&#xff0c;能够在单一芯片上多开几个…...

Gateway新一代网关

Gateway新一代网关 1、概述 ​ Cloud全家桶中有个很重要的组件就是网关&#xff0c;在1.x版本中都是采用的Zuul网关&#xff1b; ​ 但在2.x版本中&#xff0c;zuul的升级一直跳票&#xff0c;SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul。 ​ 官网&…...

Simulink中Scope图像导出在MATLAB上重新画

在Simulink中&#xff0c;Scope是一个常用的可视化工具&#xff0c;用于实时显示仿真过程中的信号波形。 1. 从Simulink Scope中导出数据 首先&#xff0c;您需要在Simulink的Scope中捕获或记录想要导出的数据。这通常通过配置Scope的“Logging”选项来实现。确保在仿真过程中…...

利用opencv获取系统时间

前一篇《c获取系统时间的方法-CSDN博客》博客介绍了如何在不同系统中获取系统时间的方法&#xff0c;但这些方法受系统的限制&#xff0c;如time.h就只能在Linux系统中使用。而opencv则不受系统限制&#xff0c;示例代码如下&#xff0c; #include <opencv2/opencv.hpp>…...

Go环境变量配置,及GOROOT、GOPATH的区别

一、安装Go go下载地址&#xff1a; https://golang.google.cn/dl/ windows下载安装&#xff0c;有两种方式。解压和直接安装 方式一&#xff1a;直接下载安装包。以.msi结尾的文件。例如&#xff1a; go1.22.1.windows-amd64.msi 下载后&#xff0c;双击后一直点下一步即…...

爬虫系列-CSS基础语法

&#x1f308;个人主页&#xff1a;会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” CSS全称层叠样式表 &#xff0c;主要用来定义页面内容展示效果的一门语言&#xff0c;HTML&#xff1a;页面骨架&#xff0c;素颜CSS&#xff1a;页面效果美化&#xff1a…...

获取比特币和莱特币的实时价格

数据来源&#xff1a; https://datacenter.jin10.com/reportType/dc_bitcoin_current 代码&#xff1a; import akshare as ak import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None) pd.set_option(display.width, 1000)cr…...

Axure案例分享—折叠面板(附下载地址)

今天和大家分享的Axure案例是折叠面板 折叠面板是移动端APP中常见的组件之一&#xff0c;有时候也称之为手风琴。咱们先看下Axure画出的折叠面板原型效果&#xff0c;然后再对该组件进行详细讲解。 一、功能介绍 折叠或展开多个面板内容&#xff0c;默认为展开一项内容&…...

SQLiteC/C++接口详细介绍sqlite3_stmt类(五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;四&#xff09;- 下一篇&#xff1a; 无 12. sqlite3_bind_text16函数 sqlite3_bind_text16函数用于将UTF-16编码的文本数据&#xff08;字符串&#xff09;绑定…...

单片机-- 数电(3)

编码器与译码器 译码 &#xff1a;将二进制代码转化为其他进制的代码 编码 &#xff1a;就是将其他代码转换为二进制码 编码器的类型 1二进制编码器 用n位二进制数码对2的n次方个输入信号进行编码的电路 2二-十进制编码器 将0到9十个十进制数转化为二进制代码的电路 2…...

基于Java中的SSM框架实现在线通用旅游平台网站系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现在线通用旅游平台网站系统演示 摘要 近几年来&#xff0c;计算机网络的发展得到了飞速的提升&#xff0c;由此展开的一系列行业大洗牌也由此开始。早些年只是人们只是对于计算机和互联网有了些基础的认识&#xff0c;现在它正在悄悄的改变着我们生活的…...

「数据分析」之零基础入门数据挖掘

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度分析数据&#xff1f;如何对数据进行整体把握&#xff0c;如何处理异常值与缺失值&#xff0c;从哪些维度进行特征及预测值分析&#xff1f; 探索性数据分析&#xff08;Exploratory Data Analysis&#…...

【力扣】383.赎金信

题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; …...

论文创新点像挤牙膏?导师强推这几个AI论文平台

想写论文又快又好&#xff0c;关键是用对 AI 工具、走对流程——资深教授普遍推荐&#xff1a;千笔AI&#xff08;中文全流程首选&#xff09; 豆包学术版&#xff08;轻量高效&#xff09; DeepSeek 学术版&#xff08;理工 / 长文本&#xff09; Grammarly Academic&#xff…...

【DeepSeek事件驱动架构实战指南】:20年架构师亲授5大核心陷阱与避坑清单

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek事件驱动架构全景认知 DeepSeek事件驱动架构&#xff08;Event-Driven Architecture, EDA&#xff09;并非单一技术组件的堆叠&#xff0c;而是一种以事件为第一公民、强调松耦合与异步协作的系统设计…...

《我看见的世界:李飞飞自传》第1-6章阅读笔记:从移民少女到AI教母的“看见“之旅

前言 当我们谈论人工智能时&#xff0c;我们谈论的是算法、数据、算力&#xff0c;是那些冰冷的代码和复杂的模型。但在《我看见的世界&#xff1a;李飞飞自传》中&#xff0c;李飞飞用她独特的视角告诉我们&#xff1a;AI的本质&#xff0c;是人类对"看见"世界的渴望…...

Burp Suite深度解析:从流量抓包到业务逻辑漏洞挖掘

1. 这不是“学个插件”——Burp Suite 是渗透测试的呼吸系统 很多人第一次听说 Burp Suite&#xff0c;是在某篇“三步拿下登录框”的速成教程里&#xff1a;装好Java、拖进浏览器代理、点几下Repeater就弹出密码明文。结果真去测一个中型SaaS后台&#xff0c;不到十分钟就卡在…...

【MySQL数据库 | 第一篇】 概述

数据库相关概念&#xff1a; 数据库(Database)&#xff1a;数据库是指一组有组织的数据的集合&#xff0c;通过计算机程序进行管理和访问。数据库管理系统&#xff1a;操纵和管理数据库的大型软件SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数…...

大佬推荐的网络安全学习路线(从基础到高级,超级详细)

大佬推荐的网络安全学习路线&#xff08;从基础到高级&#xff0c;超级详细&#xff09; 说起网络安全&#xff0c;你可能会担心它是一个过时的行业。有人说&#xff0c;网络安全快卷死了&#xff0c;你既要攻又要防&#xff0c;并且随着技术的发展&#xff0c;你还要不断地学…...

基于雷达与光敏传感器的低功耗智能窗防设备设计与实现

1. 项目概述&#xff1a;一个基于雷达与光敏的智能窗防设备几年前&#xff0c;我因为一次短暂的出差&#xff0c;家里空置了几天&#xff0c;回来后就一直琢磨着怎么给家里的窗户加点“动静”。市面上的智能安防摄像头固然好&#xff0c;但要么需要复杂的布线&#xff0c;要么云…...

从NLP到RAG:AI标书生成系统的技术架构与落地路径深度剖析

引言2026年2月&#xff0c;国家发改委等八部门联合印发《关于加快招标投标领域人工智能推广应用的实施意见》&#xff0c;明确到2026年底招标文件检测、智能辅助评标、围串标识别等重点场景在部分省市实现全覆盖。同一时期&#xff0c;《招标投标法》修订草案经国务院常务会议原…...

对比按量计费与Token Plan套餐的实际成本差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按量计费与Token Plan套餐的实际成本差异 在构建和运营基于大模型的应用时&#xff0c;成本控制是一个核心的工程考量。Taotok…...

对比不同模型在创意生成任务中的效果与token消耗差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比不同模型在创意生成任务中的效果与token消耗差异 在为一场创意大赛准备素材时&#xff0c;我们面临一个常见的选择&#xff1a…...