http://topic.csdn.net/u/20090425/14/76d8da5d-e360-4129-984e-7d3845338c4f.html
上面的这个帖子是实现了按整分触发!但是现在我发现有误差,第一次明明调整成整分触发了,周期是60秒!但是过一会,再跟踪,发现时间不是整分了?难道有误差?

解决方案 »

  1.   

    要精确的话就不要用winform里面的timer了
    试试这个System.Timers.Timer
      

  2.   

    System.Timers.Timer版本
            private void Form1_Load(object sender, EventArgs e)
            {
                System.Timers.Timer tm = new System.Timers.Timer(100);
                tm.Elapsed += new System.Timers.ElapsedEventHandler(tm_Elapsed);
                tm.Start();
            }        void tm_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                System.Timers.Timer timer1 = sender as System.Timers.Timer;
                if (timer1.Interval == 100 && DateTime.Now.Second == 0)
                {
                    timer1.Interval = 60000;//重新设置为1分钟间隔 
                }            if (timer1.Interval == 60000)
                {
                    MessageBox.Show("");
                } 
            }
      

  3.   

    WinForm里的TMER是基于Windows的WM_Timer消息的,有误差很正常。
      

  4.   

    System.Threading.Timer版本
            System.Threading.Timer tm;
            private void Form1_Load(object sender, EventArgs e)
            {
                tm =
                    new System.Threading.Timer(new System.Threading.TimerCallback(old_Elapsed)
                        ,null,0,100
                        );
            }        void old_Elapsed(object state)
            {
                if ( DateTime.Now.Second == 0)
                {
                    tm.Dispose();
                    tm =
                    new System.Threading.Timer(new System.Threading.TimerCallback(new_Elapsed)
                        , null, 0, 60000
                        );
                }
            }
            void new_Elapsed(object state)
            {
                MessageBox.Show("");
            }
      

  5.   

    还没有试试system.threading.timer;
    试了system.timer.timer,好像也是一样的问题,也是有误差!提前一秒!
      

  6.   

    这下够精确的了 
           private void Form1_Load(object sender, EventArgs e) 
            { 
                System.Timers.Timer tm = new System.Timers.Timer(100); 
                tm.Elapsed += new System.Timers.ElapsedEventHandler(tm_Elapsed); 
                tm.Start(); 
            } 
            bool done = false;
            void tm_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
            { 
                if (DateTime.Now.Second == 0) //当秒针是0的时候,因为间隔100毫秒,1秒钟会做10次这个判断
                { 
                    if(!done)  //判断这一秒内事情做过没有
                    {
                      done = true;
                      //做你的事情 
                    }
                } 
                else
                {
                    done =false;  //不在0秒的时候,设置为未作
                }
            }
      

  7.   

    而且system.threading.timer的timer也是这样的效果,都是走了一会就慢了一秒!
      

  8.   

    你还是没明白
                if (DateTime.Now.Second == 0) //当秒针是0的时候,因为间隔100毫秒,1秒钟会做10次这个判断 
                { 
                    if(!done)  //判断这一秒内事情做过没有 
                    { 
                      done = true; 
                      //轮询数据库 <==============这个地方是60秒才会进来一次的!!!
                    } 
                } 
      

  9.   

    不信,你可以把
    //轮询数据库 <==============这个地方是60秒才会进来一次的!!! 
    替换成
    MessageBox.Show("xx");
    看看是不是1分钟才执行一次
      

  10.   

    结贴!
    谢谢东东呛!
    我这做的是周期提醒的东东!@如果是从后台发消息,用socket实现!
    有没有相应的例子?
    没有做过socket!