如题:我写了一个windows services,定时往数据库中自动写入指定数据。但是总是发现一次写入两条相同数据。是为什么呢? 代码如下: using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.ServiceProcess; 
using System.Text; 
using System.Xml; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Timers; namespace WindowsService1 

    public partial class gzjh : ServiceBase 
    { 
        public gzjh() 
        { 
            InitializeComponent(); 
        }         protected override void OnStart(string[] args) 
        { 
            // TODO: 在此处添加代码以启动服务。 
            timer1.Interval = 1 * 60 * 1000; 
            timer1.Enabled = true; 
            timer1.Elapsed +=new ElapsedEventHandler(timer1_Elapsed); 
            
        }         protected override void OnStop() 
        { 
            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 
            timer1.Enabled = false; 
        }         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
        { 
            timer1.Enabled = false; 
            string strconn = "user id=sa;password=123456;Database=wpdb;server=db"; 
            string strcomm = "insert into sysplan (djh,fbr,jsr,zt) values ('SYS20090720001','SYSTEM','SYSTEM','0')"; 
            SqlConnection sqlconn = new SqlConnection(strconn); 
            sqlconn.Open(); 
            SqlCommand sqlcomm = new SqlCommand(strcomm, sqlconn); 
            SqlDataReader sdr = sqlcomm.ExecuteReader(); 
            sqlconn.Close(); 
            timer1.Enabled = true; 
        }     } 

解决方案 »

  1.   

    timer是可重入的 就是一次事件还没结束第二次事件又开始了
    建议用System.Threading.ThreadPool.RegisterWaitForSingleObject
      

  2.   

    通过SQL2000的事件查看器,得知该程序在一秒钟内,写了2次(insert into )。我在onstart()的设置是1分钟写一次,但是目前的结果是在到达间隔时写了2次。应该和timer的重入是没有关系的。我在timer1_elapsed中添加 timer1.disposed();虽然能达到写一次的效果,但是就是去了定时循环写入。因为timer1.disposed()释放了所有资源。