timer状态信息类
private class TimerState
{
public int counter = 0;
public System.Threading.Timer timer;
}
//多个timer启动
System.Threading.Timer[] timer;
void StartTimer(int i)
{
//改造gxj
if (timer[i] == null)
{
TimerState timerState = new TimerState();
TimerCallback timerDelegate = new TimerCallback(timer_Tick);
//timer[i] = new System.Windows.Forms.Timer();
timer[i] = new System.Threading.Timer(timerDelegate, timerState, 1000, 1000);
timerState.timer = timer[i];
timerState.counter = i;//线程号
if(i==1)//垃圾回收
{
timer[i].Change(1000, 60000);//5分钟
}
else if (i>1 && i <= 20)//计划等信息5秒同步一次
{
timer[i].Change(1000, 50);//duitime为第一次执行前延时,period为第二次后间隔时间
}
else if(i > 20 && i <= 30)
{
timer[i].Change(1000, 600000);//1小时同步一次
}
}
//timer[i].Interval = timeNumber1; //测试1秒
//timer[i].Tick += new EventHandler(timer_Tick);
//timer[i].Tag = i;
//timer[i].Start();
//
}
private void timer_Tick(object state)
{
TimerState s = (TimerState)state;
//s.timer.Change(1000, Timeout.Infinite);//Timeout.Infinite可改变间隔
//Console.WriteLine("{0} Checking Status {1}.", DateTime.Now.TimeOfDay, s.counter);
Console.WriteLine(s.counter + "线程,changed!!!");
if (boolFinish[s.counter])
{
ThreadFunc(s.counter);
}
}
void ThreadFunc(object o)
{
int i = Convert.ToInt32(o);
try
{
lock (_locker)
{
//##############回传和单据############
if (i == 1)//所有入库计划回传erp+手工建计划:采购入库,生产入库,内部调拨入库(单独表),移库入库(同调拨)
{
List<string> lstReturnMsg = new List<string>();
InterfaceClient_ERP.InPlanERPReturnComm("","", out lstReturnMsg);
foreach (string item in lstReturnMsg)
{
AddRow(item);
}
}
else if (i == 2)//其它Erp出库单回传:车间领料,内部调拨出库(单独表)
{
List<string> lstReturnMsg = new List<string>();
InterfaceClient_ERP.OutPlanERPReturnComm("","", out lstReturnMsg, 2);//取完成outOrderDetail订单中的内容回传
foreach (string item in lstReturnMsg)
{
AddRow(item);
}
}
else if (i == 3)//手工建出库计划回传:移库出库(同调拨),普通出库
{
List<string> lstReturnMsg = new List<string>();
InterfaceClient_ERP.OutPlanERPReturnComm("","", out lstReturnMsg, 1);//取完成outPlanDetail计划中的内容回传
foreach (string item in lstReturnMsg)
{
AddRow(item);
}
}
...
else if(i==30)
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
#endregion
}
}
catch (Exception e)
{
AddRow(e.Message);
}
finally
{
}
}