当前位置: 代码迷 >> C# >> system.timers.timer 自动停掉了某个线程解决思路
  详细解决方案

system.timers.timer 自动停掉了某个线程解决思路

热度:464   发布时间:2016-05-05 05:14:08.0
system.timers.timer 自动停掉了某个线程
代码如下:
写了个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文件也可能发生错误
原因就是你没有对多线程写同一个文件进行加锁控制,导致多线程同时访问同一个文件的时候抛异常
  相关解决方案