当前位置:编程学习 > C#/ASP.NET >>

请教一个C#,Sytem.Timers.Timer的问题

 由于要获取整车上线信息和生产订单信息,并将两信息写到其他的数据库中,所以用这个定时器来完成。设计思路:
生产订单每隔1个小时获取一次,车量上线信息每隔2分钟取一次,间隔时间从配置文件中获取。
<!--生产订单交换时间分钟为单位-->   
    <add key="uptime" value="60" />    
<!--车辆信息交换时间-->
    <add key="carUpTime" value="2" />
程序中调用

  public partial class Service1 : ServiceBase
    {
        Timer timer1 = new Timer();
        Timer timer = new Timer();
        public Service1()
        {
            InitializeComponent();
        }

    //数据连接
        string strConn = System.Configuration.ConfigurationSettings.AppSettings["ConnString"];
        string procBody = "PKG_SAPIMES";
        string inTime = System.Configuration.ConfigurationSettings.AppSettings["uptime"];
        string carTime = System.Configuration.ConfigurationSettings.AppSettings["carUpTime"];
        private OracleCommand cmdOra = null;

  protected override void OnStart(string[] args)
        {

            MyTimer();
        }

        private void MyTimer()
        {
          
                //存储线车辆信息            
                timer1.Interval = Convert.ToInt32(carTime) * 60000;
                timer1.Elapsed += new ElapsedEventHandler(setOrcDataForVeh);
                timer1.Enabled = true;
                //timer1.Start();

                // 生产订单信息
                timer.Interval = Convert.ToInt32(inTime) * 60000;
                timer.Elapsed += new ElapsedEventHandler(setOrcDataForOrder);
                timer.Enabled = true;
                //timer.Start();          
        }

目前遇到的问题:
1、本来设定的车辆信息是2分钟交换一次,实际是10分钟取一次。
2、生产订单设定的1个小时交换一次,比如一共有20个订单,但是只能交换到4个。
以上两个问题请高手解决一下,谢谢。



--------------------编程问答-------------------- 没懂,你应该把问题简化为某个模型,将给大家。 --------------------编程问答-------------------- 目前遇到的问题:  下面改成用程序的思维描述,,,这谁懂的了啊 --------------------编程问答-------------------- namespace MESTEST
{
    public partial class Service1 : ServiceBase
    {
        Timer timer1 = new Timer();
        Timer timer = new Timer();
        public Service1()
        {
            InitializeComponent();
        }

    //数据连接
        string strConn = System.Configuration.ConfigurationSettings.AppSettings["ConnString"];
          string inTime = System.Configuration.ConfigurationSettings.AppSettings["uptime"];
        string carTime = System.Configuration.ConfigurationSettings.AppSettings["carUpTime"];
        private OracleCommand cmdOra = null;      
      
          //获取生产订单
        #region
        public DataTable getOrderInfo(string frmDate, string frmTime)
        {
            //BAPI_ORDER_ITEMTable zpp = new BAPI_ORDER_ITEMTable();           
            //PuOrderInfo pporder = new PuOrderInfo();

            ZPORDVOTable zpp = new ZPORDVOTable();
            PPOrdOP pp = new PPOrdOP();
            DataTable dt = new DataTable();
           
            try
            {
                //zpp = pporder.GetAll("", "", bDate, edate, "X", "", "8090", "Z001");
                zpp = pp.GetAll(frmDate, frmTime);

                dt = zpp.ToADODataTable();

            }
            catch
            {
                throw new Exception();
            }
            finally {

                pp.CloseConn();
             
            }
          

            return dt;
        }
        
        #endregion

    //总装储存线车辆信息类上线 
        #region 
        public DataTable getLineCarInfoNew(string frmDate, string frmTime)
        {
            SAPISPS.ZPPSOP objDal = new ZPPSOP();

            DataTable dtBack = new DataTable();

            try
            {
                dtBack = objDal.GetAll("U", frmDate, frmTime).Tables[0];
             }
            catch {

                throw new Exception();
            }
            finally {           
                
            }

            return dtBack;
        }
        #endregion

        private static string Format(string value)
        {
            if (value.Length == 1)
                value = "0" + value;
            return value;
        }
       //写入订单
   public void setOrcDataForOrder(object sender,System.Timers.ElapsedEventArgse)          
  
        {
            
            DateTime now = DateTime.Now.AddMinutes(-20);
            string date = now.Year.ToString() + Format(now.Month.ToString()) + Format(now.Day.ToString());
            string time = Format(now.Hour.ToString()) + Format(now.Minute.ToString()) + Format(now.Second.ToString());           

            DataTable dt2 = new DataTable();
            dt2 = getOrderInfo(date, time);
            string strBack = "";

            if (dt2.Rows.Count > 0) {

                //连接数据库
                try
                {
                    cmdOra = new OracleCommand();
                    cmdOra.Connection = ConnectDB();
                    cmdOra.CommandType = CommandType.StoredProcedure;
                    cmdOra.CommandText = "PP_SETPPORDER";
                    cmdOra.Parameters.Add("MONUM_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("MTCODE_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("MOQTYS_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("PSDATE_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("PFDATE_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("CPCODE_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("CPQTYS_1", OracleType.VarChar);
                    int b = dt2.Rows.Count;

                    for (int i = 0; i < b; i++)
                    {
                        cmdOra.Parameters["MONUM_1"].Value = dt2.Rows[i][0].ToString();
                        cmdOra.Parameters["MTCODE_1"].Value = dt2.Rows[i][3].ToString();
                        cmdOra.Parameters["MOQTYS_1"].Value = dt2.Rows[i][4].ToString();
                        cmdOra.Parameters["PSDATE_1"].Value = dt2.Rows[i][1].ToString();
                        cmdOra.Parameters["PFDATE_1"].Value = dt2.Rows[i][2].ToString();
                        cmdOra.Parameters["CPCODE_1"].Value = dt2.Rows[i][6].ToString();
                        cmdOra.Parameters["CPQTYS_1"].Value = dt2.Rows[i][7].ToString();

                        cmdOra.Parameters["MONUM_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["MTCODE_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["MOQTYS_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["PSDATE_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["PFDATE_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["CPCODE_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["CPQTYS_1"].Direction = ParameterDirection.Input;

                        cmdOra.ExecuteNonQuery();

                    }

                }
                catch (Exception ex)
                {
                    writePP(date, time);
                }
                finally
                {
                    writePP(date, time);
                    if (cmdOra.Connection.State == ConnectionState.Open)
                    {
                        cmdOra.Connection.Close();
                        cmdOra.Connection.Dispose();
                        cmdOra.Parameters.Clear();
                        cmdOra.Dispose();

                    }
                } 
            }  

            //return;

        }
             

--------------------编程问答-------------------- //写入车辆信息   
public void setOrcDataForVeh(object sender, System.Timers.ElapsedEventArgs e)      
     
        {
            DateTime now = DateTime.Now.AddMinutes(-20);
            string date = now.Year.ToString() + Format(now.Month.ToString()) + Format(now.Day.ToString());
            string time = Format(now.Hour.ToString()) + Format(now.Minute.ToString()) + Format(now.Second.ToString());
            
            
            DataTable dt1 = new DataTable();
            dt1 = getLineCarInfoNew(date, time);
            string strBack = "";
            
            if (dt1.Rows.Count > 0) {

                //连接数据库
                try
                {
                    cmdOra = new OracleCommand();
                    cmdOra.Connection = ConnectDB();
                    cmdOra.CommandType = CommandType.StoredProcedure;
                    cmdOra.CommandText = "PP_SETPPVEH";

                    cmdOra.Parameters.Add("MONUM_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("VIN", OracleType.VarChar);
                    cmdOra.Parameters.Add("ZUPDATE_1", OracleType.VarChar);
                    cmdOra.Parameters.Add("ZUPTIME_1", OracleType.VarChar);

                    int a = dt1.Rows.Count;

                    for (int i = 0; i < a; i++)
                    {
                        //cmdOra.Parameters.Add("MONUM_1", OracleType.VarChar);
                        //cmdOra.Parameters.Add("VIN", OracleType.VarChar);
                        //cmdOra.Parameters.Add("ZUPDATE_1", OracleType.VarChar);
                        //cmdOra.Parameters.Add("ZUPTIME_1", OracleType.VarChar);

                        cmdOra.Parameters["MONUM_1"].Value = dt1.Rows[i][1].ToString();
                        cmdOra.Parameters["VIN"].Value = dt1.Rows[i][0].ToString();
                        cmdOra.Parameters["ZUPDATE_1"].Value = dt1.Rows[i][3].ToString();
                        cmdOra.Parameters["ZUPTIME_1"].Value = dt1.Rows[i][4].ToString();

                        cmdOra.Parameters["MONUM_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["VIN"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["ZUPDATE_1"].Direction = ParameterDirection.Input;
                        cmdOra.Parameters["ZUPTIME_1"].Direction = ParameterDirection.Input;

                        cmdOra.ExecuteNonQuery();
                    }

                }
                catch (Exception ex)
                {
                    strBack = "数据处理产生意外:" + ex.Message;
                    writeCar(date, time);
                }
                finally
                {
                    
                    if (cmdOra.Connection.State == ConnectionState.Open)
                    {
                        cmdOra.Connection.Close();
                        cmdOra.Connection.Dispose();
                        cmdOra.Parameters.Clear();
                        cmdOra.Dispose();

                    }
                } 
            
            }
            //writeCar(date, time);
            //return ;

        }
        #endregion


   //获取数据
        #region 
        /// <summary>
        /// 获取要上传的数据表 默认返回为一集合
        /// </summary>
        /// <param name="procName">用$分割的参数集</param>
        /// <returns></returns>
        public DataTable getOrcData(string procName, string[] procParame)
        {
            OracleConnection conn = null;
            DataSet ds = new DataSet();
            try
            {
                conn = new OracleConnection(strConn);
                conn.Open();
                OracleCommand cmd = new OracleCommand();
                cmd.Connection = conn;
                cmd.CommandText = procBody + procName;
                cmd.CommandType = CommandType.StoredProcedure;
                for (int i = 0; i < procParame.Length; i++)
                {
                    OracleParameter drParameter = new OracleParameter();
                    string[] strParame = procParame[i].Split('$');
                    drParameter.ParameterName = strParame[0];
                    drParameter.DbType = DbType.String;
                    drParameter.Value = strParame[1];
                    cmd.Parameters.Add(drParameter);
                }
                cmd.Parameters.Add("myCur", OracleType.Cursor).Direction = ParameterDirection.Output;
                OracleDataAdapter da = new OracleDataAdapter(cmd);
                da.TableMappings.Add("myCur", "myCur");
                da.Fill(ds);
            }
            catch (Exception ex)
            {
                
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
            if (ds != null && ds.Tables.Count > 0)
            {
                return ds.Tables[0];
            }
            else
            {
                return null;
            }

        }
        #endregion

        protected override void OnStart(string[] args)
        {

            MyTimer();
        }

        private void MyTimer()
        {
            int iTime = Convert.ToInt32(DateTime.Now.TimeOfDay.TotalSeconds);

            if (iTime <= 21600 || iTime >= 82800)  //0点到6点不交换 23点后不交换
            {
                return;
            }
            else {

                //存储线车辆信息            
                timer1.Interval = Convert.ToInt32(carTime) * 60000;
                timer1.Elapsed += new ElapsedEventHandler(setOrcDataForVeh);
                timer1.Enabled = true;
                //timer1.Start();

                // 生产订单信息
                timer.Interval = Convert.ToInt32(inTime) * 60000;
                timer.Elapsed += new ElapsedEventHandler(setOrcDataForOrder);
                timer.Enabled = true;
                //timer.Start();            
            }           
            
         
        }

          

        protected override void OnStop()
        {
            
            
            FileStream fs = new FileStream(@"d:\mesreg.txt", FileMode.OpenOrCreate, FileAccess.Write);

            StreamWriter m_streamWriter = new StreamWriter(fs);

            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

            m_streamWriter.WriteLine(" MES服务: Service Stopped " + DateTime.Now.ToString() + "\n");

            m_streamWriter.Flush();

            m_streamWriter.Close();

            fs.Close();


        }
    }
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,