找到最后一条timer2写入的日志,看到底报什么错误了还是如何了
你确定不是SendLog(_timer.LogFolder, "locate "+ex.ToString());这个代码本身就异常了?

解决方案 »

  1.   

    可能是多线程引起的问题,Elapsed事件是在ThreadPool上执行的,你在置true的同时可能另一个同时将其置为false.
      

  2.   

    Z65443344 
    sendlog 函数代码如下:
     public void SendLog(string logFolder, string error)
            {
                StringBuilder builder = new StringBuilder();
                //Directory.SetCurrentDirectory("C:\\test\\log");
                if (!Directory.Exists(logFolder)) //如果文件夹不存在则创建
                {
                    Directory.CreateDirectory(logFolder);
                }
                Directory.SetCurrentDirectory(logFolder);            string path = Directory.GetCurrentDirectory() + "\\download" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + ".txt";            builder.Append(string.Concat(new object[] { 
       "\r\n\r\nlog "+DateTime.Now.ToShortTimeString()+"\r\n\r\n", error.ToString()
      }));
                StreamWriter writer = new StreamWriter(path, true, Encoding.UTF8);
                writer.Write(builder);
                writer.Close();
            }locate 只是我做的一个标记,然后log中有如下报错:
    System.IO.IOException: 文件“D:\EDI\BabyCare\Log\download2015-1-7.txt”正由另一进程使用,因此该进程无法访问该文件。
    这个对 timer有影响吗?
      

  3.   

    你现在的逻辑是,timer事件里先执行download,如果抛异常则进catch,最后执行finally
    但是你在catch里又执行了写文件的操作,而写文件的代码里没有加try,catch,导致如果写文件失败,整个方法抛个异常,finally也不会执行了
      

  4.   

    既然你读写D:\EDI\BabyCare\Log\download2015-1-7.txt这个文件可能会发生错误,那么你读写C盘的log文件也可能发生错误
    原因就是你没有对多线程写同一个文件进行加锁控制,导致多线程同时访问同一个文件的时候抛异常
      

  5.   

    谢谢,后来我又查了,说可以用log4net 
      

  6.   

    Z65443344 
    再问一下,是不是用了 using 就相当于加锁了
     using (StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312")))   
    {
               sw.Write(builder);
               sw.Close();
    }
      

  7.   

    using和lock是完全不同的2个东西
    用了using,出了代码块,括号里定义的对象就会自动释放,这跟锁完全不沾边
      

  8.   

    Z65443344 
    不好意思,还想问下,有关锁文件的事情,网上说
    FileStream objFileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.None);
    共享方式打开文件,就可以解决了,用这个可以吗?或者您有代码可以让我参考一下吗,谢谢了