多线程里面要写日志,有时候会遇到文件已被其它线程占用的问题,但是用lock也解决不了lock (sw)
            {
                CreateLogFile();
                 sw = new StreamWriter(GetFileName(), true);
                sw.Write(expStr);
                sw.Close();
            }一样没办法解决 

解决方案 »

  1.   

    呵呵,你那样是锁不住的
    你可以申明一个静态变量
    static object obj= new object();
    lock(obj)
    {
    ......
    }
      

  2.   

    我是这样做的不知道有问题不,运行是通地字public class Log
    {
       private static Log log =  new Log();
       public static AddLong(Exception ex)
       {
         lock(Log.log)
          {
          Log.log.WriteLog(ex);
          }
       }
       private WriteLog(Exception ex)
       {
                DateTime dateTime = DateTime.Now;
                string messageString = ex.Message;
                string sourceString = ex.Source;
                string stacktrace = ex.StackTrace;
                string expStr = "";
                expStr += string.Format("      <exception>\r\n");
                expStr += string.Format("        <Time>{0}</Time>\r\n", dateTime.ToString());
                expStr += string.Format("        <Message>{0}</Message>\r\n", messageString);
                expStr += string.Format("        <Source>{0}\r\n", sourceString);
                expStr += string.Format("        </Source>\r\n");
                expStr += string.Format("        <StackTrace>{0}\r\n", stacktrace);
                expStr += string.Format("        </StackTrace>\r\n");
                expStr += string.Format("      </exception>\r\n");
                    CreateLogFile();
                    StreamWriter sw = new StreamWriter(GetFileName(), true);
                    sw.Write(expStr);
                    sw.Close();
       }
       }