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

大家来帮我看看,我这个多线程怎么来lock它的执行,以及多线程怎么来写同一个文件,在线等
我已经问了这个问题问几遍了,已经困扰我好久了,请各位高手帮忙,先谢谢大家了
我这个程序,线程是单独放在一个类里面,通过创建这个类的对象来创建线程,本来想用锁来控制线程,真是这两个问题搞死了,在线等!

我有两个问题:
1、我这个多线程应该怎么控制它,让它一个执行完了再接着让另一个线程执行,我这里用了lock,mutex,monitor都没用。用lock也不知道锁定哪个对象,因为我这里根本没有公共对象,还有就是线程lock能锁定filestream吗?
2、如果第一个问题无法解决控制多线程,那么多线程怎么来写同一个log文件,我这个程序是从10多个支服务器取数据,所以要把取数据的情况写在日志当中。
下面有一个写日志函数,但是总是最后一个线程执行的日志情况。


我的结构如下:
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);     //这里是创建B类的对象,从而创建线程
        }
        ....
    }
    ..........
}


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();
      }
}


------解决方案--------------------
private static object lockobj =null;

lock(lockobj)
{
writeFileLog
}

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070130

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
參見
http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx
------解决方案--------------------
希望能幫上你。