返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#中的三种定时计时器Timer用法介绍
  • 795
分享到

C#中的三种定时计时器Timer用法介绍

2024-04-02 19:04:59 795人浏览 薄情痞子
摘要

在.net中有三种计时器: 1、System.windows.FORMs命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabl

.net中有三种计时器:

  • 1、System.windows.FORMs命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabled=True后才会自动计时,停止计时可以用Stop()方法控制,通过Stop()停止之后,如果想重新计时,可以用Start()方法来启动计时器。Timer控件和它所在的Form属于同一个线程
  • 2、System.Timers命名空间下的Timer类。System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。
  • 3、System.Threading.Timer类。定义该类时,通过构造函数进行初始化。

在上面所述的三种计时器中,第一种计时器和它所在的Form处于同一个线程,因此执行的效率不高;而第二种和第三种计时器执行的方法都是新开一个线程,所以执行效率比第一种计时器要好,因此在选择计时器时,建议使用第二种和第三种。

下面是三种定时器使用的例子:

1、Timer控件

设计界面:

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TimerDemo
{
    public partial class FrmMain : Form
    {
        //定义全局变量
        public int currentCount = 0;
        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            //设置Timer控件可用
            this.timer.Enabled = true;
            //设置时间间隔(毫秒为单位)
            this.timer.Interval = 1000;
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            currentCount += 1;
            this.txt_Count.Text = currentCount.ToString().Trim();
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            //开始计时
            this.timer.Start();
        }

        private void btn_Stop_Click(object sender, EventArgs e)
        {
            //停止计时
            this.timer.Stop();
        }
    }
}

2、System.Timers.Timer

设计界面:

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TimersTimer
{
    public partial class FrmMain : Form
    {
        //定义全局变量
        public int currentCount = 0;
        //定义Timer类
        System.Timers.Timer timer;
        //定义委托
        public delegate void SetControlValue(string value);

        public FrmMain()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitTimer();
        }

        /// <summary>
        /// 初始化Timer控件
        /// </summary>
        private void InitTimer()
        {
            //设置定时间隔(毫秒为单位)
            int interval = 1000;
            timer = new System.Timers.Timer(interval);
            //设置执行一次(false)还是一直执行(true)
            timer.AutoReset = true;
            //设置是否执行System.Timers.Timer.Elapsed事件
            timer.Enabled = true;
            //绑定Elapsed事件
            timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerUp);
        }

        /// <summary>
        /// Timer类执行定时到点事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TimerUp(object sender, System.Timers.ElapsedEventArgs e)
        {
            try
            {
                currentCount += 1;
                this.Invoke(new SetControlValue(SetTextBoxText),currentCount.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("执行定时到点事件失败:" + ex.Message);
            }
        }

        /// <summary>
        /// 设置文本框的值
        /// </summary>
        /// <param name="strValue"></param>
        private void SetTextBoxText(string strValue)
        {
            this.txt_Count.Text = this.currentCount.ToString().Trim();
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            timer.Start();
        }

        private void btn_Stop_Click(object sender, EventArgs e)
        {
            timer.Stop();
        }
    }
}

3、System.Threading.Timer

设计界面:

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Threading.Timer
{
    public partial class FrmMain : Form
    {
        //定义全局变量
        public int currentCount = 0;
        //定义Timer类
        System.Threading.Timer threadTimer;
        //定义委托
        public delegate void SetControlValue(object value);

        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            InitTimer();
        }

        /// <summary>
        /// 初始化Timer类
        /// </summary>
        private void InitTimer()
        {
            threadTimer = new System.Threading.Timer(new TimerCallback(TimerUp), null, Timeout.Infinite, 1000);
        }

        /// <summary>
        /// 定时到点执行的事件
        /// </summary>
        /// <param name="value"></param>
        private void TimerUp(object value)
        {
            currentCount += 1;
            this.Invoke(new SetControlValue(SetTextBoxValue), currentCount);
        }

        /// <summary>
        /// 给文本框赋值
        /// </summary>
        /// <param name="value"></param>
        private void SetTextBoxValue(object value)
        {
            this.txt_Count.Text = value.ToString();
        }

        /// <summary>
        /// 开始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Start_Click(object sender, EventArgs e)
        {
            //立即开始计时,时间间隔1000毫秒
            threadTimer.Change(0, 1000);
        }

        /// <summary>
        /// 停止
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Stop_Click(object sender, EventArgs e)
        {
            //停止计时
            threadTimer.Change(Timeout.Infinite, 1000);
        }
    }
}

代码下载链接:点此下载

到此这篇关于C#中的三种定时计时器Timer用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#中的三种定时计时器Timer用法介绍

本文链接: https://lsjlt.com/news/140853.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中的三种定时计时器Timer用法介绍
    在.NET中有三种计时器: 1、System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabl...
    99+
    2024-04-02
  • C#中三种Timer计时器的详细用法
    一、基于 Windows 的标准计时器(System.Windows.Forms.Timer) 首先注意一点就是:Windows 计时器是为单线程环境设计的。它直接继承自Compon...
    99+
    2024-04-02
  • C#四种计时器Timer的区别和用法
    1、System.Threading.Timer 线程计时器 1、最底层、轻量级的计时器。基于线程池实现的,工作在辅助线程。 2、它并不是内在线程安全的,并且使用起来比其他计时器更麻...
    99+
    2024-04-02
  • C#四种计时器Timer怎么使用
    这篇文章主要介绍了C#四种计时器Timer怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#四种计时器Timer怎么使用文章都会有所收获,下面我们一起来看看吧。1、System.Threading.Ti...
    99+
    2023-06-30
  • Android计时器的三种实现方式(Chronometer、Timer、handler)
    本文实例为大家分享了Android计时器的三种方法,具体内容如下 目录: 1、借助Timer实现 2、调用handler.sendMessagedely(Message msg...
    99+
    2022-06-06
    handler Android
  • C#中Timer定时器类的简单使用
    目录System.Timers.Timer定时器简单使用设置初始属性简单示例–借用官方示例System.Timers.Timer 定时器就是经过固定时间,执行固定任务。 ...
    99+
    2024-04-02
  • C#中的Timer定时器类如何使用
    本文小编为大家详细介绍“C#中的Timer定时器类如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中的Timer定时器类如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。System.Timers...
    99+
    2023-06-30
  • iOS中的3种定时器汇总介绍
    目录在iOS中有3种常见的定时器,它们会根据不同的场景进行选择使用。 1.DispatchSourceTimer: 基于GCD实现。 2.CADisplayLink:基于屏幕刷新实现...
    99+
    2023-05-19
    ios定时器 IOS定时器使用详解 iOS常见三种定时器
  • Android中使用定时器的三种方法
    本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handle...
    99+
    2022-06-06
    方法 定时器 Android
  • C++定时器实现和时间轮介绍
    目录定时器最小堆实现定时器时间轮单层级时间轮多层级时间轮定时器 有些时候我们需要延迟执行一些功能,比如每10s进行一次数据采集。或者告知用户技能冷却有多少时间,如果我们将执行这些功能...
    99+
    2024-04-02
  • java中Timer定时器怎么用
    小编给大家分享一下java中Timer定时器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Timer定时器的使用和启动1.概述定时计划任务功能在Java中主...
    99+
    2023-06-22
  • Java中的定时器Timer详解
    目录总结简单来说,定时器就相当于一个“闹钟”,给定时器设定一个任务,约定这个任务在xxx时间之后执行~ Timer类提供了一个核心接口,schedule(安排) 指定一个任...
    99+
    2024-04-02
  • C#定时任务框架Quartz.NET介绍与用法
    什么是定时任务? 最近恰巧有类似的需求, 需要做一个应用程序服务, 每天定时给服务器上传采集的数据。 在没有任务框架的使用前提下, 如果我们想要实现类似的需求,可以自己写一个计时器,...
    99+
    2024-04-02
  • Linux中Timer定时器怎么使用
    在Linux中,可以使用timer_create函数创建一个定时器,然后使用timer_settime函数设置定时器的间隔和触发方式...
    99+
    2023-10-26
    Linux
  • php怎么将时间转化为时间戳?三种方法介绍
    时间戳是计算机系统用于记录日期和时间的一种简单方式。在PHP中,可以通过将日期时间转换为时间戳来计算时间差、检索数据等等。本文将介绍PHP中如何将时间转换为时间戳的方法。date()函数PHP中,使用date()函数可以将任何日期和时间格式...
    99+
    2023-05-14
    php php时间戳
  • Android三种实现定时器的方法
    方法一、使用Handler和Thread(线程)实现定时器 代码如下: package com.xunfang.handerDemo; import android.app....
    99+
    2022-06-06
    方法 定时器 Android
  • 如何在Java中使用Timer定时器
    如何在Java中使用Timer定时器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、概念      定时计划任务功能在J...
    99+
    2023-05-30
    java timer
  • Java 中Timer和TimerTask 定时器和定时任务使用的例子
    这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求Timer类是用来执行任务的类,它接受一个TimerTask做参数Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),...
    99+
    2023-05-31
    timertask 定时器 tim
  • Java实现Timer的定时调度函数schedule的四种用法
    目录schedule(task,time)schedule(task,time,period)schedule(task,delay)schedule(task, delay,per...
    99+
    2023-05-17
    Java Timer schedule Java schedule
  • CSS的三种使用方法介绍
    本篇内容介绍了“CSS的三种使用方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这里和大家分享一下应...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作