我已经问了这个问题问几遍了,已经困扰我好久了,请各位高手帮忙,先谢谢大家了
我这个程序,线程是单独放在一个类里面,通过创建这个类的对象来创建线程,本来想用锁来控制线程,真是这两个问题搞死了,在线等!我有两个问题:
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();
   }
}

解决方案 »

  1.   

    private static object lockobj =null;lock(lockobj)
    {
    writeFileLog
    }
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070130http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    參見
    http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx
      

  3.   

    谢谢tjvictor(下一站----星星) ,你那个我已经看了
      

  4.   

    to feiyun0112(http://feiyun0112.cnblogs.com/):
    你定义的那个静态变量有什么用啊,还有我现在还有个问题是,多个线程写文件的时候无法最加在一起,总是最后一个线程写的信息.