WPF 入门教程DispatcherTimer计时器
https://www.zhihu.com/tardis/bd/art/430630047?source_id=1001
在 WinForms 中,有一个名为 Timer 的控件,它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性,但我们有DispatcherTimer控件,而不是不可见的控件。它几乎做同样的事情,但不是将它放在表单上,而是专门从代码隐藏代码中创建和使用它。
DispatcherTimer 类的工作方式是指定一个时间间隔,然后订阅每次满足该时间间隔时将发生的Tick事件。在调用Start()方法或将IsEnabled属性设置为 true之前,不会启动 DispatcherTimer 。
让我们尝试一个简单的例子,我们使用 DispatcherTimer 创建一个数字时钟:
<Window x:Class="WpfTutorialSamples.Misc.DispatcherTimerSample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="DispatcherTimerSample" Height="150" Width="250"><Grid><Label Name="lblTime" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center" /></Grid>
</Window>
using System;
using System.Windows;
using System.Windows.Threading;namespace WpfTutorialSamples.Misc
{public partial class DispatcherTimerSample : Window{public DispatcherTimerSample(){InitializeComponent();DispatcherTimer timer = new DispatcherTimer();timer.Interval = TimeSpan.FromSeconds(1);timer.Tick += timer_Tick;timer.Start();}void timer_Tick(object sender, EventArgs e){lblTime.Content = DateTime.Now.ToLongTimeString();}}
}
XAML 部分非常简单——它只是一个带有大字体的居中标签,用于显示当前时间。
在这个例子中,代码隐藏是魔法发生的地方。在窗口的构造函数中,我们创建了一个 DispatcherTimer 实例。我们将Interval属性设置为 一秒,订阅 Tick 事件,然后启动计时器。在 Tick 事件中,我们只需更新标签以显示当前时间。
当然,DispatcherTimer 可以以更小或更大的间隔工作。例如,您可能只希望每 30 秒或 5 分钟发生一次 - 只需使用 TimeSpan.From* 方法,如 FromSeconds 或 FromMinutes,或创建一个完全符合您需求的新 TimeSpan 实例。
为了展示 DispatcherTimer 的功能,让我们尝试更频繁地更新……更频繁地更新!
using System;
using System.Windows;
using System.Windows.Threading;namespace WpfTutorialSamples.Misc
{public partial class DispatcherTimerSample : Window{public DispatcherTimerSample(){InitializeComponent();DispatcherTimer timer = new DispatcherTimer();timer.Interval = TimeSpan.FromMilliseconds(1);timer.Tick += timer_Tick;timer.Start();}void timer_Tick(object sender, EventArgs e){lblTime.Content = DateTime.Now.ToString("HH:mm:ss.fff");}}
}
如您所见,我们现在要求 DispatcherTimer 每毫秒触发一次!在 Tick 事件中,我们也使用自定义时间格式字符串来显示标签中的毫秒数。现在您有一些可以轻松用作秒表的东西 - 只需向窗口添加几个按钮,然后让它们调用 计时器上的Stop()、Start()和Restart()方法。
概括
在许多情况下,您需要在给定的时间间隔内在应用程序中发生某些事情,而使用 DispatcherTimer,这很容易实现。请注意,如果您在 Tick 事件中做了一些复杂的事情,它不应该运行得太频繁,就像在上一个示例中,计时器每毫秒滴答一次——这会给运行您的应用程序的计算机带来沉重的压力。
另请注意,DispatcherTimer 并非在所有情况下都 100% 精确。tick 操作放在 Dispatcher 队列中,因此如果计算机压力很大,您的操作可能会延迟。.NET 框架承诺 Tick 事件永远不会太早发生,但不能承诺它不会稍微延迟。但是,对于大多数用例, DispatcherTimer 已经足够精确了。
如果您需要您的计时器在队列中具有更高的优先级,您可以通过发送 DispatcherTimer 优先级上的值之一来设置 DispatcherPriority 。
推荐WPF MVVM框架开源控件库:Newbeecoder.UI
编辑https://www.zhihu.com/video/1515266659548389376
Demo下载:
Newbeecoder.UI开源项目
相关文章:

WPF 入门教程DispatcherTimer计时器
https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中,有一个名为 Timer 的控件,它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性,但我们有DispatcherTimer控件,而不是不可见的控件。它几…...

【教学类-43-04】20231229 N宫格数独4.0(n=2,4,6,8) (ChatGPT AI对话大师生成 回溯算法)
作品展示: 背景需求: 幼儿表示自己适合做5宫格 第一次AI生成九宫格数独python代码 【教学类-43-03】20231229 N宫格数独3.0(n1、2、3、4、6、8、9) (ChatGPT AI对话大师生成)-CSDN博客文章浏览阅读162次&…...

WPF美化ItemsControl1:不同颜色间隔
首先我们有的是一个绑定好数据的ItemsControl <ItemsControl ItemsSource"{Binding Starts}"> </ItemsControl> 运行后呢是朴素的将数据竖着排列 如果想要数据之间有间距,可以使用数据模板,将数据放到TextBlock中显示࿰…...

查看进程对应的路径查看端口号对应的进程ubuntu 安装ssh共享WiFi设置MyBatis 使用map类型作为参数,复杂查询(导出数据)
Linux 查询当前进程所在的路径 top 命令查询相应的进程号pid ps -ef |grep 进程名 lsof -I:端口号 netstat -anp|grep 端口号 cd /proc/进程id cwd 进程运行目录 exe 执行程序的绝对路径 cmdline 程序运行时输入的命令行命令 environ 记录了进程运行时的环境变量 fd 目录下是进…...
医院信息系统集成平台—安全保障体系
隐私保护措施 隐私保护及信息安全是医院信息平台所要重点解决的问题,应从患者同意,匿名化服务,依据病种、角色等多维度授权,关键信息(字段级、记录级、文件级)加密存储等方面展开。电子病历等医疗数据进行调阅时,包括强身份认证需求、角色授权需求、责任认…...

【信息论与编码】习题-填空题
目录 填空题1.克劳夫特不等式是判断( )的充要条件。2.无失真信源编码的中心任务是编码后的信息率压缩接近到()限失真压缩中心任务是在给定的失真度条件下,信息率压缩接近到( )。3.常用的检纠错方…...

二叉树的层序遍历经典问题(算法村第六关白银挑战)
基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入…...
信息学奥赛一本通:装箱问题
题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid1917 题目 1917:【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4117 通过数: 2443 【题目描述】 有一个箱子容量为V�(正整数,…...

ReactNative 常见问题及处理办法(加固混淆)
ReactNative 常见问题及处理办法(加固混淆) 文章目录 摘要引言正文ScrollView内无法滑动RN热更新中的文件引用问题RN中获取高度的技巧RN强制横屏UI适配问题低版本RN(0.63以下)适配iOS14图片无法显示问题RN清理缓存RN navigation参…...

算法基础之合并果子
合并果子 核心思想: 贪心 Huffman树(算法): 每次将两个最小的堆合并 然后不断向上合并 #include<iostream>#include<algorithm>#include<queue> //用小根堆实现找最小堆using namespace std;int main(){int n;cin>>n;priority_queue&l…...
CSS 使用技巧
CSS 使用技巧 引入苹方字体 苹方提供了六个字重,font-family 定义如下:苹方-简 常规体font-family: PingFangSC-Regular, sans-serif;苹方-简 极细体font-family: PingFangSC-Ultralight, sans-serif;苹方-简 细体font-family: PingFangSC-Light, sans…...

typescript,eslint,prettier的引入
typescript 首先用npm安装typescript,cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件,这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项,在该配置项中的目录下,所有的d.ts中的类型可以在…...
web前端javaScript笔记——(7)Math和Date方法
Math -Math和其他的对象不同,它不是一个构造函数, 它属于一个工具类不用创建对象,它里边封装了数学运算相关的属性和方法 比如 Math.PI 表示的圆周率 使用方法Math.方法(); Math.abs()可以用来计算一个数的绝对值 Math.ceil()可以对一…...

深入理解Java中资源加载的方法及Spring的ResourceLoader应用
在Java开发中,资源加载是一个基础而重要的操作。本文将深入探讨Java中两种常见的资源加载方式:ClassLoader的getResource方法和Class的getResource方法,并介绍Spring框架中的ResourceLoader的应用。 1. 资源加载的两种方式 1.1 ClassLoader…...

实时记录和查看Apache 日志
Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器,保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件,监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…...
Java实战项目五:文本冒险游戏
文章目录 一、实战概述二、知识点概览(一)条件分支与循环结构(二)面向对象设计(三)用户交互与事件处理 三、思路分析(一)系统架构设计(二)功能模块划分详解 四…...
docker_ROS的usb_cam使用与标定
目录 准备 准备标定板 新建容器 新建usb_cam话题的ROS功能包 编写代码 编译 运行功能包 标定 安装camera_calibration标定功能包 启动发布usb_cam话题的功能包 启动camera_calibration标定功能包 准备 usb相机 标定板 一个带有ROS的docker镜像。 准备标定板 图…...

记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 机房突然停电,rabbitmq的主机异常断电,集群服务全部需要重启。但是在执行service…...

rime中州韵小狼毫 help lua Translator 帮助消息翻译器
lua 是 Rime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 h…...

C++完成使用map Update数据 二进制数据
1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...