请教一个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#