日期:2014-05-20  浏览次数:21222 次

多线程操作同一个文件,向文件写数据,为什么线程锁不住?各位请进
这个问题已经困扰我好久了,请各位高手帮忙,先谢谢大家了
我的线程是单独放在一个类里面,通过创建这个类的对象来创建线程,本来想用锁来控制线程,但是线程是在不同对象里的,所以没法控制,用lock,mutex,monitor都没用,但现在又遇到多线程写同一个文件这个问题,真是这个问题搞死了,
我的结构如下:
class   A
{
    ..........
    private   void   bt_select_Click(object   sender,   System.EventArgs   e)
    {
        ....
        for(int   i=0;i <xmllist.Count;i++)
        {
              B   b=new   B(xmllist[i],i);
        }
        ....
    }
    ..........
}


Class   B
{
    ......
    public   B(string   ip,string   i)
    {
        Thread   thd   =   new   Thread(new   ThreadStart(ExcuteImport));
        j=i+1;
        thd.Name= "线程 "+j+ ",支队ip: "+ip;
        sb_log.Append( "/*******************************/ ");
        sb_log.Append( "【 "+thd.Name+ "】 ");
        thd.Start();
    }
    .......
    private   void   writeFileLog()
    {
        DateTime   dt=DateTime.Now;
        FileStream   fs;
        string   path=Directory.GetCurrentDirectory()+ "\\log\\ ";
        string   filename=dt.ToString( "d ")+ ".log ";
        StreamWriter   writeFileLog;

        if(!Directory.Exists(path))
        {
Directory.CreateDirectory(path);
        }
        fs=new   FileStream(path+filename,FileMode.OpenOrCreate,FileAccess.Write,FileShare.ReadWrite);

        writeFileLog=new   StreamWriter(fs);
        writeFileLog.Write(sb_log);
        writeFileLog.Close();
        fs.Close();
      }
}



------解决方案--------------------
你可以看看
http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx