c# timer 时间问题

源码是这样的private void timer_works_Tick(object sender, EventArgs e)
{
this.timer_works.Stop();
Thread th = new Thread(new ThreadStart(this.getCon));
th.Start();
this.timer_works.Start();
} timer_works.Interval 设定是 一分钟,timer_works 中掉用的方法执行完毕可能超过1分钟,接着就出现问题了,timer_works中的第一次循环还没有完成,第二次的循环又开始了.我想要的效果是timer_works中方法执行完毕后,在计时1分钟后在执行此方法..我用 Stop()和Star()来控制没有能实现效果,有那位高手指点下要则么做.

第1个回答  2013-10-27
是的,你用的这个定时器不行。System.Windows.Forms.Timer 使用UI线程(主线程)计时,如果你窗体操作太多,定时器就会延时,误差很大。建议更换使用 System.Timers.Timer,它使用独立线程计时,受干扰更少、定时触发更精确。不过使用时要注意处理跨线程操作。
C#共有三个Timer:System.Windows.Forms.Timer、System.Timers.Timer和System.Threading.Timer。后两者都是独立线程计时。
第2个回答  2013-10-27
C#中timer有个属性是interval是执行的时间间隔,以毫秒为单位的。然后,timer的Start()和Stop()方法是控制timer开始和结束。这个不应该写在方法timer_works_Tick里面因为当执行到Stop时,就停止反复执行,然后向下执行到Start方法时,又开启了反复执行(就是立即执行了timer_works_Tick方法)。这样就没有循环执行的作用。
第3个回答  2013-10-27
在建立一个Timer 用他来监听 线程是否结束如果结束了, 就this.timer_works.Start();
第4个回答  2013-10-27
设置Interval时间就可以了.把线程放里面不太好吧?这样会相隔一分钟实例化一个线程调用方法的...
第5个回答  2013-11-01
timer1.interval
=
5000;
然后在timer1的tick事件里写timer1.stop();
对楼主要干什么不太了解,不知道是不是这个意思.

C# 解决Timer定时器在整点重复进入
通过检查当前时间与整点时间之间的误差,确保定时器仅在整点时刻触发。具体实现为在定时器事件处理函数中,使用 `Math.Abs` 方法计算当前时间与整点时间的差值。如果差值小于某个预设的误差时间(如80毫秒),则不执行定时器事件,从而避免重复触发。综上所述,通过上述两种策略,我们能够有效控制C#中Time...

C# 使用Timer控件设置时间间隔
Timer 控件是为 Windows 窗体环境设计的,用于定期引发事件。通过设置 Interval 属性,可以定义时间间隔长度,单位为毫秒。计时器每经过指定时间间隔便会引发 Tick 事件,允许执行用户自定义的代码。Interval 属性设置计时器开始计时的时间间隔,其值不得小于1。Enabled 属性控制计时器是否启用,为true表示启用...

c# timer 时间问题
是的,你用的这个定时器不行。System.Windows.Forms.Timer 使用UI线程(主线程)计时,如果你窗体操作太多,定时器就会延时,误差很大。建议更换使用 System.Timers.Timer,它使用独立线程计时,受干扰更少、定时触发更精确。不过使用时要注意处理跨线程操作。C#共有三个Timer:System.Windows.Forms.Timer、...

C#timer不准确 timer忽快忽慢
多线程是对CPU时间进行了分配。Timer线程启动时,CPU要分配时间片给它,导致其它线程可分配时间片变少了。显然当Timer线程在运行的时候,其它线程就被阻塞了。要等Timer线程的时间片过去之后才能继续运行其它线程

c#创建timer过了0点不执行
这种就不应该用timer,应该用线程。线程休眠和定时开启。timer是当前时间减去上次发生的时间,过12点,那么当前时间小于上次定时时间。所以不会执行

C# 时间控件timer 怎么才能一秒钟 刷新一次窗体
将timer控件的Interval的属性定为1000 (1000毫秒 表示1秒)Enabled的属性定为true (启动) 可后台操作 然后双击timer控件 在事件的方法里写刷新页面的数据 如 private void timer1_Tick(object sender, EventArgs e){ this.Lable1.text=DateTime.Now.ToLongTimeString();} 让Lable1 1秒刷新一次当前时间...

c# 关于timer控件的问题
这取决于在Timer_Tick方法中那个长时间(100ms)操作是否在主线程上(也就是启动并显示窗体的那个线程)。1)耗时操作在主线程上执行,那么会等待耗时100ms的操作完成后,才会引发下一次10ms定时事件。2)耗时操作在辅助线程(后台线程)上执行,那么在耗时处理期间,会继续发生10ms定时事件。Timer1_Tick...

C# 中timer时间控件 显示当前时间0.5秒钟刷新一次窗体的完整代码怎么...
刷新窗体?一般都是刷新数据的。比如一个窗体有个datagridview显示数据 那么每隔0.5S刷新一次datagridview数据。拖个timer控件 设置inter...(单词记不住)属性为500 (1000就是1秒)在窗体加载时候 写上timer1.Enabled = true;\/\/就是启用timer控件 双击timer进去写代码:这事件就是每隔0.5S就执行一次。里...

C# 计时器 比系统时间慢
单线程的程序,时钟是不会和系统时间相同的。因为你的触发间隔是1秒,跑代码本身也要消耗时间,所以timer每次的间隔是1秒多一些。我的建议是:每次触发的时候去读取datetime.now这个系统时间。 望采纳。

C# timer 持续5秒钟无动作,执行
if (!timer1.Enabled)\/\/如果定时器为停止的,启动定时器 { timer1.Enabled = true;} } private void timer1_Tick(object sender, EventArgs e){ timeNum++;\/\/定时器的循环时间为100毫秒,5秒即 5000\/100 if (timeNum > 50){ \/\/这里执行你要的提交事件 timer1.Enabled = false;\/\/停止定时...

相似回答