首页 > 编程语言 >C# Timer定时器分类

C# Timer定时器分类

时间:2023-04-11 10:37:26浏览次数:35  
标签:控件 定时器 Timers C# System Timer 线程 计时器

关于C#中timer类  在C#里关于定时器类就有4个   

1、System.Windows.Forms:【基于UI】

  System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabled=True后才会自动计时,停止计时可以用Stop()方法控制,通过Stop()停止之后,如果想重新计时,可以用Start()方法来启动计时器。Timer控件和它所在的Form属于同一个线程;


2、System.Timers.Timer:【基于服务】

  System.Timers命名空间下的Timer类。System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。


3、System.Threading.Timer:【基于线程】

  System.Threading.Timer类。定义该类时,通过构造函数进行初始化。
在上面所述的三种计时器中,第一种计时器和它所在的Form处于同一个线程,因此执行的效率不高;而第二种和第三种计时器执行的方法都是新开一个线程,所以执行效率比第一种计时器要好,因此在选择计时器时,建议使用第二种和第三种。

4、System.Windows.Threading.DispatcherTimer

  DispatcherTimer:Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为  DispatcherTimer的操作也是放置在Dispatcher队列中的,何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。

 

private readonly System.Timers.Timer timerCurrStatus;

public Form1()
{

  timerCurrStatus = new System.Timers.Timer(1000);

  timerCurrStatus.Elapsed += timerCurrStatusElapsed;

}

private void timerCurrStatusElapsed(object sender, ElapsedEventArgs e)
{

://to do something

}

private void CardInit()
{

  timerCurrStatus.Enabled = true; // 打开定时器

}

 

private void CardExit()
{

  timerCurrStatus.Enabled = false;//退出定时器

}

 

标签:控件,定时器,Timers,C#,System,Timer,线程,计时器
From: https://www.cnblogs.com/buukma/p/17305335.html

相关文章

  • JavaScript 去除数组中重复的元素 得到新数组
    方法一:思路:准备一个新数组,将原数组中的元素一一放入新数组,放入之前判断该元素是否存在新数组中,不存在的话就直接存入新数组。functionuniqueArr(arr){ varnewArr=[]; for(leti=0;i<arr.length;i++){ if(newArr.indexOf(arr[i])==-1){ newArr.push(arr[i]); } } r......
  • circumstance单词解析
    circumstance这个单词经常背诵经常忘记,意思是 n. 环境,条件,情况境遇,经济状况前缀circum-表示“环绕,周围”,和表示“圆、环”的词根circ-,cycl-同源。词根st-,sta-,stat-,stan-,stant-,stin-=stand,表示“站、立”。后缀-ance表名词,“性质,状况”,一般缀于动词后......
  • Andorid NoSuchFieldError: No static field D of type I in class Lx/x/x/R$layout解
    一、介绍我们在开发过程中,会出现各种问题,包括布局资源的问题,但是这种布局几乎是和资源有关,出现这种情况有以下三种1.资源冲突资源冲突,最右可能造成的原因是两个不同的module拥有相同的layout名字,这就会导致在打包的时候,如果别的module优先被处理,占据了有利先机,而你的资源可能被别人......
  • Android Jetpack组件之WorkManager高级概念介绍与使用(三)
    一、介绍        通过前面两篇,我们基本掌握了组件的workmanager的接入,以及api的使用等。但是一个框架如果运用在复杂的项目中,肯定需要有其他额外的支持,介绍来我们将会介绍高级概念,以及对前面的知识点进行回顾与拓展。高级概念一、配置和初始化        默认情况下,当......
  • C#数据序列化研究:改进版KLV
    所谓KLV即Key-Length-Value,以【键-数据长度-数据】的形式将数据序列化成字节流,这是一种高性能和兼容性的数据序列化方案,,缺点就是用起来很麻烦,其出现的需求场景如下:1,硬件和云端的数据交互,最开始是以流的形式顺序写入数据,但是由于版本迭代,数据字段难免出现新增插入更新移除等现......
  • Javascript 原型与原型链
    在BrendanEich设计Javascript时,借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的面向对象系统,是因为BrendanEich一开始没有打算在JavaScript中加入类的概念,其设计初衷是为非专业的开发人员提供一个方便的工具,使其使用尽可能简单、易学。随着人们对网页要求的逐......
  • Nginx 通过 Cookie 做灰度就这么简单
    由于业务需要,要做灰度发布测试,刚开始考虑通过IP来做判断,分发不同的后端,但是由于IP不好确定,有的客户端IP不固定,所以考虑用cookie来做逻辑很简单,如下图:  在nginx做这个很简单,两个方法,map或if首先看map怎么做为了模拟环境,我又不想多开服务器,所以起了个http......
  • The Cross-Entropy Loss Function for the Softmax Function
    TheCross-EntropyLossFunctionfortheSoftmaxFunction作者:凯鲁嘎吉-博客园 http://www.cnblogs.com/kailugaji/本文介绍含有softmax函数的交叉熵损失函数的求导过程,并介绍一种交叉熵损失的等价形式,从而解决因log(0)而出现数值为NaN的问题。1.softmax函数求导2.交......
  • dotnet-exec 让 C# 程序更简单【转】
    Introdotnet-exec是一个可以执行C#程序而不需要项目文件的命令行工具,并且你可以指定自定义的入口方法不仅仅是Main方法在python/NodeJs里,可以使用pythonxx.py/nodexx.js来运行代码,在C#中一般是需要项目文件才能dotnetrun运行代码,这对于一些比较简单的代码来说会显得麻......
  • ubuntu 编译出现错误fatal error: bits/libc-header-start.h: No such file or direct
    在ubuntugcc编译程序出现错误fatalerror:bits/libc-header-start.h:Nosuchfileordirectory表明缺少库环境。解决方法aptupdateapt-getinstallgcc-multilib成功编译......