首页 > 其他分享 >计时器

计时器

时间:2023-09-29 14:31:37浏览次数:27  
标签:void System Timer 计时器 timer new using

c#中计时器有4种:

Timer timer = new Timer(),控件
System.Timers.Timer timer2 = new System.Timers.Timer();代码
System.Threading.Timer threadTimer = new System.Threading.Timer( );  代码
DispatcherTimer dispatcherTimer = new DispatcherTimer();代码

1.Timer使用 可以在winform中的工具栏中直接拖一个控件

也可以在代码中自己new一个

代码:

记得使用using

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Timer timer = new Timer();
        public int a = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            timer.Start();
            timer.Tick += Timer_Tick;
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            a++;
            label1.Text = a.ToString();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer.Enabled = true;
            timer.Interval = 1000;
        }
    }
}

2.System.Timers.Timer使用 2种方式

第一种:使用SynchronizingObject,和上面的用法一样,单线程方式。

代码

记得使用using

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        System.Timers.Timer timer  = new System.Timers.Timer();
        public int a = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            timer.Start();
            timer.Elapsed += Timer_Elapsed;
        }
 
        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            a++;
            label1.Text = a.ToString();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer.Enabled = true;
            timer.Interval = 1000;
            timer.SynchronizingObject = this;
        }
    }
}

第二种,不使用SynchronizingObject,多线程方式。

代码

记得使用using

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        System.Timers.Timer timer  = new System.Timers.Timer();
        delegate void SetTextCallback(string text);             //委托
        public int a = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            timer.Start();
            timer.Elapsed += Timer_Elapsed;
        }
 
        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            a++;
            SetTextCallback deg = new SetTextCallback(SetText);
            this.Invoke(deg, new object[] { a.ToString() });   //委托传值
           
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer.Enabled = true;
            timer.Interval = 1000;
        }
 
        private void SetText(string text)
        {
            label1.Text = text;
        }
    }
}

3.System.Threading.Timer使用 代码

记得使用using

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        System.Threading.Timer timer = null;
        delegate void SetTextCallback(string text);             //委托
        public int a = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            //立即开始计时,时间间隔1000毫秒:
            timer.Change(0, 1000);
            //停止计时:
            //timer.Change(Timeout.Infinite, 1000);
            //暂停计时:
            //timer.Change(-1, -1);
        }
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer = new System.Threading.Timer(new System.Threading.TimerCallback(ThreadMethod), null, -1, -1);  //最后两个参数依次为:多久后开始,隔多久执行一次。
 
        }
        public void ThreadMethod(Object state)
        {
            a++;
            SetTextCallback deg = new SetTextCallback(SetText);
            this.Invoke(deg, new object[] { a.ToString() });   //委托传值
 
        }
 
        private void SetText(string text)
        {
            label1.Text = text;
        }
 
    }
}

4.DispatcherTimer使用 DispatcherTimer只有wpf才能使用,和winform中的timer差不多。

记得使用using

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
 
namespace WpfApp2
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        int a = 0;
        public MainWindow()
        {
            InitializeComponent();
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += Timer_Tick;
            timer.Start();
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            a++;
            lblA.Content = a.ToString();
        }
    }
}

标签:void,System,Timer,计时器,timer,new,using
From: https://blog.51cto.com/u_15585624/7649869

相关文章

  • 【vue2】实现数字纵向滚动效果(计时器效果)
    需求:在页面中显示一个数字,并在进入视口时显示计时器滚动效果: 效果如上↑ 新建组件ScrollNumber.vue:<template><divstyle="display:inline-flex;justify-content:flex-start;align-items:center;"><divv-for="(item......
  • Winform中使用System.Windows.Forms.Timer多次启动停止计时器时绑定事件会重复多次执
    场景C#中实现计时器功能(定时任务和计时多长时间后执行某方法):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106274074以上关于定时器的使用。在实现点击按钮启动定时器,点击停止按钮停止定时器时发现,重复多次后会导致定时器方法累计重复执行。联想到如下情况......
  • js简单的倒计时器~~⏰
    1.效果图2.html部分3.逻辑部分3.1获取当前时间,时间差//获取当前时间vardate=newDate();varnow=date.getTime();//设置截止时间varstr="2023/9/1412:28:34";varendDate=newDate(str);varend=......
  • vue.js框架的iframe页面计时器无法销毁的解决方法
    同学试过使用生命周期等方式都不能清除计时器;因而改用这个方法;1,首先vue页面上随便写个有高度的div如下:用refs获取高度<divclass="hub-fixed-box":style="{width:fixedWidth+'px'}"ref="fixedTop"></div>2.定时器定义在data内data:{timer:null,//计时器}3,初始......
  • C#计时器
    namespacejishiqi{publicpartialclassForm1:Form{intcount;inttime;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){......
  • 停止计时器
      ......
  • STM32采用主从计时器实现精确脉冲输出
         首先按前面所述的主从计时器要求配置好主从计时器,这是最基本的要求。主计时器负责设置脉冲输出的频率以及输出脉冲,从计数器所控制输出的脉冲数。具体过程是这样的,主进程启动主从计时器,从计时器通过主计时器输出的触发信号开始脉冲计数,当达到指定的计数值后,产生中......
  • HPET(High Precision Event Timer)是一种高精度事件计时器,它是计算机系统中的一项技术,用
    HPET(HighPrecisionEventTimer)是一种高精度事件计时器,它是计算机系统中的一项技术,用于提供更准确的时间测量和事件同步。HPET是一种硬件计时器,它具有以下特点:高精度:HPET可以以纳秒级别的精度进行时间测量,比传统计时器更准确。一致性:HPET提供一致的时间基准,可以在不同的操......
  • 直播平台搭建,小小倒计时器
    直播平台搭建,小小倒计时器 publicclassjishiqi:MonoBehaviour{  Imagem_image;  Textm_text;  voidStart()  {    m_image=GetComponent<Image>();    m_text=GameObject.Find("Text").GetComponent<Text>();    m_i......
  • 【HarmonyOS】ArkTS学习之基于TextTimer的简易计时器
    ​【关键字】ArkTS、计时器、TextTimer 【介绍】TextTimer是ArkTS提供的通过文本显示计时信息并控制其计时器状态的组件。今天就给大家展示一个基于TextTimer的简易计时器的实现吧。在使用之前我们要先了解它的用法:TextTimer(options?:{isCountDown?:boolean,count?:n......