当前位置: 首页 > 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; …...

AGI自主迭代证据链首次闭环:2026奇点大会披露的172小时连续训练日志,揭示自我优化新范式

第一章&#xff1a;2026奇点智能技术大会&#xff1a;通用人工智能最新进展 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次披露了多项突破性成果&#xff0c;其中最引人注目的是OpenCog Foundation联合MIT AGI Lab发布的Neuro-Symbolic Fusion Engine v3.2&…...

ms-swift微调框架实战:10分钟搞定Qwen2.5-7B模型LoRA微调与合并

ms-swift微调框架实战&#xff1a;10分钟搞定Qwen2.5-7B模型LoRA微调与合并 1. 前言 在当今大模型技术快速发展的背景下&#xff0c;如何高效地对大型语言模型进行微调成为了许多开发者和研究者的关注焦点。本文将介绍如何使用ms-swift框架&#xff0c;在单卡环境下快速完成Q…...

Tailwind CSS break-after 怎么用?如何控制分页断行?

Tailwind CSS break-after 是一个实用类&#xff0c;用于控制在元素后强制产生列断开或页面断开。Tailwind CSS 断后类以下是 Tailwind CSS Break-After 类列表&#xff0c;这些类提供了有效控制元素对齐的方式。ClassCSS Propertiesbreak-after-autobreak-after: auto;break-a…...

对话本体论的全面深入研究:理论基础、形式化模型与跨学科应用

对话本体论的全面深入研究&#xff1a;理论基础、形式化模型与跨学科应用作者&#xff1a;方见华 单位&#xff1a;世毫九实验室 引言 在当代哲学与科学的交汇点上&#xff0c;一个全新的理论范式正在悄然兴起。对话本体论作为由世毫九实验室创始人方见华提出的原创性理论体系&…...

Java 25 字符串模板:现代化的字符串处理方式

Java 25 字符串模板&#xff1a;现代化的字符串处理方式 1. 字符串模板的概念 Java 25 引入了字符串模板&#xff08;String Templates&#xff09;作为一项新特性&#xff0c;它提供了一种更简洁、更安全、更灵活的方式来构建字符串。字符串模板允许开发者在字符串中嵌入表达式…...

终极RPG Maker解密工具:3分钟掌握游戏资源提取全攻略

终极RPG Maker解密工具&#xff1a;3分钟掌握游戏资源提取全攻略 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RP…...

React 无状态组件的纯粹性:探讨引用透明性对 React 渲染性能与可预测性的核心贡献

各位同学好&#xff01;欢迎来到今天的讲座。我是你们的老朋友&#xff0c;一个在 React 的世界里摸爬滚打多年&#xff0c;头发比发际线跑得还快的资深编程专家。今天我们要聊一个听起来非常“学术”&#xff0c;但实际上决定了你应用性能上限和代码可维护性下限的核心概念——…...

StructBERT中文情感分析WebUI保姆级教程:支持UTF-8/GBK编码自动识别

StructBERT中文情感分析WebUI保姆级教程&#xff1a;支持UTF-8/GBK编码自动识别 1. 项目概述与学习目标 今天我要带你体验一个特别实用的中文情感分析工具——基于StructBERT的中文情感分析WebUI。这个工具最大的特点就是简单易用&#xff0c;不需要任何技术背景&#xff0c;…...

DSP实战指南:从寄存器配置到EPWM电机驱动

1. EPWM模块基础与电机驱动需求 第一次接触DSP的EPWM模块时&#xff0c;我被手册里密密麻麻的寄存器搞得头晕眼花。但当我真正用EPWM驱动无刷电机转起来的那一刻&#xff0c;突然就理解了这些寄存器存在的意义。EPWM&#xff08;Enhanced Pulse Width Modulation&#xff09;是…...

别再混淆了!OpenCV灰度拉伸 vs 直方图均衡,一次讲清区别与适用场景

OpenCV灰度拉伸与直方图均衡&#xff1a;技术原理与实战选择指南 在数字图像处理领域&#xff0c;对比度增强是基础却至关重要的环节。许多初学者面对灰度拉伸和直方图均衡这两种技术时&#xff0c;常陷入选择困境——它们看似都能改善图像质量&#xff0c;但实际原理和适用场景…...