WPF定时器

DispatcherTimer定时器,可以说是专门为WPF界面设计的定时器。因为这个定时器是和UI都在同一线程上的。

添加命名空间引用

cs 复制代码
using System.Windows.Threading;

实例化

cs 复制代码
DispatcherTimer _timer = new DispatcherTimer();

设定定时器参数

cs 复制代码
 /*设置定时时间方法一*/
 _timer.Interval = new TimeSpan(0,1,0);//设置时间间隔h,m,s

 /*设置定时时间方法二*/
 timer.Interval = TimeSpan.FromMilliseconds(100);//设置的间隔为100ms

 _timer.Tick += Timer_Tick;//绑定计时事件(Tick事件在UI线程执行)

 _timer.DispatcherPriority = DispatcherPriority.Normal;//可选:设置定时器优先级(默认Normal)

启动、停止、修改定时时间

cs 复制代码
// 重启定时器
_timer.Start();

// 暂停定时器
_timer.Stop();

// 修改时间间隔(需先停止再修改,或直接修改后生效)
_timer.Interval = TimeSpan.FromMilliseconds(500); // 改为500ms触发一次
Tick 事件处理(更新 UI)
cs 复制代码
private void Timer_Tick(object sender, EventArgs e)
{
    _count++;
    // 直接更新UI控件(安全,因为在UI线程)
    lblTimer.Content = $"计时:{_count}秒";
    
    // 示例:计时到10秒停止
    if (_count >= 10)
    {
        _timer.Stop();
        lblTimer.Content = "计时结束!";
    }
}

实例

cs 复制代码
using System.Windows;
using System.Windows.Threading;

public partial class MainWindow : Window
{
    private DispatcherTimer _timer;
    private int _count = 0;

    public MainWindow()
    {
        InitializeComponent();
        
        // 1. 创建DispatcherTimer实例
        _timer = new DispatcherTimer();
        
        // 2. 设置时间间隔(单位:毫秒)
        _timer.Interval = TimeSpan.FromSeconds(1); // 每秒触发一次
        
        // 3. 绑定计时事件(Tick事件在UI线程执行)
        _timer.Tick += Timer_Tick;
        
        // 4. 可选:设置定时器优先级(默认Normal)
        _timer.DispatcherPriority = DispatcherPriority.Normal;
        
        // 5. 启动定时器
        _timer.Start();
    }
}
Tick 事件处理(更新 UI)
cs 复制代码
private void Timer_Tick(object sender, EventArgs e)
{
    _count++;
    // 直接更新UI控件(安全,因为在UI线程)
    lblTimer.Content = $"计时:{_count}秒";
    
    // 示例:计时到10秒停止
    if (_count >= 10)
    {
        _timer.Stop();
        lblTimer.Content = "计时结束!";
    }
}

label显示定时数据

复制代码
<!-- 用于数字自增显示 -->
<Label x:Name="counterLabel"
        Content="0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        Margin="20,20,0,0"
        FontSize="20"
        Padding="6"/>

private void timer_Tick(object? sender, EventArgs e)
{
    // 每次 Tick 自增并显示计数
    cnt++;
    Debug.WriteLine($"[{DateTime.Now:HH:mm:ss}] DispatcherTimer Tick 触发。cnt={cnt}");

    // DispatcherTimer 在 UI 线程运行,可以直接更新控件;使用 null-条件以防控件未命名或未初始化
    counterLabel?.SetValue(ContentControl.ContentProperty, cnt);
}
相关推荐
wuyk55510 小时前
防逆向基础:在量产固件中关闭调试接口并设置读保护(RDP)的正确姿势
stm32·单片机·嵌入式硬件·性能优化·重构
zhangrelay13 小时前
单片机原理与接口技术-2026融合版-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
单片机·嵌入式硬件
lhbweilai14 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
艾络迅Acceleronix15 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
涂山苏苏⁠15 小时前
stm32复习总结
stm32·单片机·嵌入式硬件
Zwawa15 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
苏格拉真没有底16 小时前
ESP32 AI MCP调试器
stm32·单片机·嵌入式硬件
深圳老胡16 小时前
压力检测空吸功能硬件方案全解析:主流压力传感器品牌与实现路径
笔记·单片机·代码规范
samble16 小时前
从零搭建半导体设备上位机(二):Prism + DryIoc,五个工程与区域导航怎么串起来
wpf·prism·dryioc
硅基造物主16 小时前
STM32 从 0 到 1 做智能家居(二):把开发环境一次配好
stm32·mqtt·智能家居·hal库·esp-12f