private void timer1_Tick(object sender, System.EventArgs e)
{
   if 条件成立时执行下列循环
   for (int i=1;i<=iRowCount;i++)
     {
        循环体代码 执行的内容是从数据库里取的 执行的时间不同     }
}
我设置的Interval=10000(10秒)
问题1:
当循环体内容未执行完时,timer又触发了一次,将意味这我想要处理的数据没处理完,怎么解决?
问题2
能不能把循环体单独提出来做成一个函数,当每次timer触发是排成一个队列去执行,这种办法应该怎么做?不知道讲明白了没?万分着急请各位打虾帮忙?

解决方案 »

  1.   

    >>当循环体内容未执行完时,timer又触发了一次,将意味这我想要处理的数据没处理完,怎么解决?
    循环前: timer1.Enabled = false;
    循环后:timer1.Enabled = true;
      

  2.   

    能不能把循环体单独提出来做成一个函数,当每次timer触发是排成一个队列去执行,这种办法应该怎么做?[C#] 
    public class Timer2
     {
     
         public static void Main()
         {
           // Create a new Timer with Interval set to 10 seconds.
           System.Timers.Timer aTimer = new System.Timers.Timer(10000);
           aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
           // Only raise the event the first time Interval elapses.
           aTimer.AutoReset = false;
           aTimer.Enabled = true;
     
           Console.WriteLine("Press \'q\' to quit the sample.");
           while(Console.Read()!='q');
         }
     
         // Specify what you want to happen when the event is raised.
         private static void OnTimedEvent(object source, ElapsedEventArgs e) 
         {
           Console.WriteLine("Hello World!");
         }
     }
      

  3.   

    上面的是基于事件的,可以异步执行
    wangsaokui(无间道III(终极无间)能不能说的更详细一点啊!
      

  4.   

    本人发现在timer的tick事件里设置timer的属性或调用timer的事件都会有问题,不知各位有和高见
      

  5.   

    private void timer1_Tick(object sender, System.EventArgs e)
    {
     lock( objLocker ) // <====== 添加同步机制,便可以实现所谓的排队执行。
     {
       if 条件成立时执行下列循环
       for (int i=1;i<=iRowCount;i++)
         {
            循环体代码 执行的内容是从数据库里取的 执行的时间不同     }
      }
    }添加lock(),可以实现排队机制,其实你可以在lock()之前,去判断一个类变量,当正在处于操作时就置为true, 否则为false,这样就可以避免一大堆timer事件在堆积。