代码如下:
写了个Mytimer 继承timer
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MyTimer tmr = new MyTimer();
tmr.Interval = int.Parse(ds.Tables[0].Rows[i]["interval"].ToString());
tmr.FtpPath = ds.Tables[0].Rows[i]["ftpfolder"].ToString();
tmr.Elapsed += new ElapsedEventHandler(tmrDownload_Tick);
tmr.AutoReset = true;
tmr.Start();
}
private void tmrDownload_Tick(object sender, ElapsedEventArgs e)
{
MyTimer _timer = (MyTimer)sender;
_timer.Enabled = false;
try
{
DownloadFile( _timer.FtpPath);
}
catch (Exception ex)
{
SendLog(_timer.LogFolder, "locate "+ex.ToString());
}
finally
{
//加了finally如果遇到错误,就不会停掉TIMER
_timer.Enabled = true;
}
}
public void DownloadFile(string ftpPath)
{
//代码
}
for 循环里启动了几个不同ftpfolder的timer线程,比如说1,2,3,4,5,6, 打了log,启动window service 服务后,过了一天打开log发现其中一个线程2没有了,也就是timer自动停掉了其中一个线程,虽然我写了 _timer.Enabled = true;
但还是自动停,这是什么原因啊?谢谢了!
------解决思路----------------------
既然你读写D:\EDI\BabyCare\Log\download2015-1-7.txt这个文件可能会发生错误,那么你读写C盘的log文件也可能发生错误
原因就是你没有对多线程写同一个文件进行加锁控制,导致多线程同时访问同一个文件的时候抛异常