日期:2014-05-17  浏览次数:20683 次

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()来控制没有能实现效果,

有那位高手指点下要则么做.


------解决方案--------------------
换个思路做,也许会更好。
------解决方案--------------------
不用线程肯定是顺序执行,
如果想用线程的话,就搞一个全局变量吧,timer负责监听该变量,
如果线程运行结束了,给全局变量一个信号,
然后在timer里监听到该全局变量的改变后,就可以继续其他工作了。
------解决方案--------------------
请使用Invoke来做跨线程处理
------解决方案--------------------
探讨
C# codeprivatevoid timer_works_Tick(object sender, EventArgs e)
{this.timer_works.Stop();//很诡异,计时器开始的时候你把他停了,那拿什么计时呢?相当于计时器就是个调用函数,只是负责转移执行流到这里,还多此一举... Thread th=new Thread(new Thr?-

------解决方案--------------------
private void timer_works_Tick(object sender, EventArgs e)
{
this.timer_works.Stop();
Thread th = new Thread(new ThreadStart(this.getCon));
th.Start();
th.join;
this.timer_works.Start();
}
------解决方案--------------------
用回调函数