怎么在C#中实现精确timer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在C#中实现精确timer相关的知识,希望对你有一定的参考价值。

C# Timer用法及实例详解
1.C# Timer用法及实例详解
http://developer.51cto.com/art/200909/149829.htm
http://www.cnblogs.com/OpenCoder/archive/2010/02/23/1672043.html
关于C# Timer类 在C#里关于定时器类就有3个
C# Timer使用的方法1.定义在System.Windows.Forms里
C# Timer使用的方法2.定义在System.Threading.Timer类里 "
C# Timer使用的方法3.定义在System.Timers.Timer类里
◆System.Windows.Forms.Timer
应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

◆System.Timers.Timer
和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。
◆System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。
C# Timer用法实例
使用System.Timers.Timer类

System.Timers.Timer t = new System.Timers.Timer(10000); //实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件;
t.AutoReset = true; //设置是执行一次(false)还是一直执行(true);
t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件;

public void theout(object source, System.Timers.ElapsedEventArgs e)

MessageBox.Show("OK!");


以上用法类似于winform,如下
1.将timer拖到界面上,设定属性值,时间间隔等;
2.在事件中双击自动生成如theout的方法;
3. 调用方法,在要调用的按钮事件等内,timer.start(),timer.stop() 这样就行了。
参考技术A 你的精确度是多少?
严格意义上的精确,只有实时系统才会有,WINDOWS这种多任务系统,用户程序在时间控制上完全没精确可言,是不可能实现的任务。

C# 两个timer的 调用

我想在一个窗体里实现,一个timer显示时间,精确到1s,一个timer的程序每5秒运行一次,请问怎么实现??

参考技术A 2个方法都可以了,
1:设置2个timer,互不干扰。
2:在显示时间的timer里增加一个判断
定义一个private static int loops;
在timer显示时间执行时loops++,if(loops==5)程序2;loops=0

看起来还是第一个方法比较好一点。追问

两个timer会互相影响的,做不到互不干扰

追答

你用多线程方式啊,到点就启动线程啊,除非有共享数据段,一般不会有问题。

追问

方便给我讲一讲多线程么??我不大明白~~我现在总是会遇到多线程冲突的问题。

本回答被提问者采纳
参考技术B 两个timer有关系吗?每个timer都有自己的名字吧
如timer1,timer2
timer1设置时间1000
timer2设置时间5000
每个timer的事件触发就做自己的动作,不会有关系的。
在使用时
timer1.Start();
timer2.Start();
timer各控件会各自控制自己的时间,两不相关。追问

两个timer不能同时运行的,会有几秒的时间差,不信你试一下~

参考技术C 。。。
设置两个timer完成不同的工作呀。
timer1.Interval = 1000;
timer2.Interval =5000;
然后编写各自完成的操作,两者互不相干。
参考技术D timer的程序每5秒运行一次:
int n = 0;//用于计数
private void timer1_Tick(object sender, EventArgs e)//每5000毫秒执行一次

n++;
MessageBox.Show("你好,这是第"+n+"次打招呼哦");//弹出对话框告诉你
if (n >= 4)//不能无限的循环下去,当弹出3个对话框了,就停

timer1.Enabled = false;//此属性为false,timer1_Tick事件就不会执行了



private void Form1_Load(object sender, EventArgs e)

timer1.Enabled = true; //设置为truetimer1_Tick实践就会执行,开始计时
timer1.Interval = 5000; //设置timer1的timer1_Tick实践执行周期为5000毫秒

显示时间可以直接调用函数Datetime.Now追问

要时时更新的话恐怕需要timer进行更新,我用的就是Datetime.Now,就算用了Datetime.Now,如果不用timer,也不是实时更新的

追答

private void timer1_Tick(object sender, EventArgs e)

currentTime = System.DateTime.Now;
TextBox.Text = currentTime.ToString();

这样就行了哈~ 设置此timer的Interval 为1000ms 。

以上是关于怎么在C#中实现精确timer的主要内容,如果未能解决你的问题,请参考以下文章

C# 两个timer的 调用

c#中实现用户注册到数据库,怎么做?

QML中实现setTimeout和setInterval

C# timer 持续5秒钟无动作,执行

C#中关于ToolStripStatusLable

现代c++中实现精确延时方法总结