大家来帮我看看,我这个多线程怎么来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
------解决方案--------------------希望能幫上你。