C# 定时器类实现1s定时器更新UI

1. 代码

//BaseTimer.cs

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace baseTimer
{
    //定义一个timer超时的委托
    public delegate void baseTimerDelegate(int cnt);

    
    class BaseTimer : IDisposable
    {
        private bool disposed = false;        
        private System.Threading.Timer timer1;
        private int period = 0;
        private int cnt = 0;
        private readonly object lockObject = new object();
        private bool isTimerRunning = false;
        private baseTimerDelegate timeoutDelegate;

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    timer1?.Dispose();
                    timer1 = null;
                }
                disposed = true;
            }
        }

        public BaseTimer(baseTimerDelegate Delegate1,int period1)
        {
            period = period1;
            timeoutDelegate = Delegate1;
            timer1 = new System.Threading.Timer(TimerStepCallBack, null, Timeout.Infinite, period);
        }
        private void TimerStepCallBack(Object stateInfo)
        {
            cnt++;
            timeoutDelegate(cnt);
        }

        /// <summary>
        /// 启动定时器,每秒中断一次
        /// </summary>
        public void Start(int ms)
        {
            lock (lockObject)
            {
                if (!isTimerRunning)
                {
                    isTimerRunning = true;
                    cnt = 0;
                    // 立即启动,每秒触发一次
                    period = ms;
                    timer1.Change(0, ms);
                }
            }
        }

        /// <summary>
        /// 停止定时器
        /// </summary>
        public void Stop()
        {
            lock (lockObject)
            {
                if (isTimerRunning)
                {
                    timer1.Change(Timeout.Infinite, period);
                    isTimerRunning = false;
                    cnt = 0;
                    timeoutDelegate(cnt);
                }
            }
        }
    }
}

//Form1.cs

csharp 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace baseTimer
{
    public partial class Form1 : Form
    {
        //定义一个timer超时的委托
        private baseTimerDelegate baseTimerDelegate1;
        private BaseTimer baseTimer1;

        public Form1()
        {
            InitializeComponent();

            baseTimerDelegate1 = new baseTimerDelegate(TimerBaseInvoke);
            baseTimer1 = new BaseTimer(baseTimerDelegate1,1000);
            // 订阅窗体关闭事件
            this.FormClosing += Form1_FormClosing;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            baseTimer1?.Dispose();
        }

        private void TimerBaseInvoke(int cnt)
        {
            Invoke((EventHandler)(delegate
            {
                textBox1.Text = cnt.ToString();
            }));
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            baseTimer1.Start(1000);
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            baseTimer1.Stop();
        }
    }
}

2 . 效果

相关推荐
qq_401700411 分钟前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
玖釉-15 分钟前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
XMYX-020 分钟前
37 - Go env 环境变量:配置管理与运行时控制
开发语言·golang
一楼的猫44 分钟前
从文本特征分析看网文平台AI检测:3个被忽视的指标
开发语言·人工智能·学习方法·ai编程·ai写作·ai自动写作
yuan199971 小时前
基于MATLAB的梁非线性动力学方程编程实现框架
开发语言·matlab
Xin_ye100861 小时前
C# 零基础到精通教程 - 第十一章:LINQ——语言集成查询
开发语言·c#
欧米欧1 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++
Xin_ye100861 小时前
C# 零基础到精通教程 - 第十章:集合与泛型——高效管理数据
开发语言·c#
ch.ju1 小时前
Java Programming Chapter 4——Composition of classes
java·开发语言
人道领域1 小时前
Java基础热门八股总结:八种基本数据类型 + 装箱拆箱 + 缓存机制,(90%的Java新手都搞不清的装箱拆箱问题)
java·开发语言·python