我已经问了这个问题问几遍了,已经困扰我好久了,请各位高手帮忙,先谢谢大家了
我这个程序,线程是单独放在一个类里面,通过创建这个类的对象来创建线程,本来想用锁来控制线程,真是这两个问题搞死了,在线等!我有两个问题:
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、我这个多线程应该怎么控制它,让它一个执行完了再接着让另一个线程执行,我这里用了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();
}
}
解决方案 »
- VS2005 C# wince下画图问题
- C#如何处理oracle游标返回结果集
- 利用FileUpload控件,将图片传入数据库
- 100分,gridview 点击问题
- 【【又来狂甩分了】】都说WinForm下用Combobox实现联动很简单,给点代码好吗?【200分,帮顶有喜哈】
- 难题!!如何在panel容器内动态增加几个TEXTBOX??
- 100分急求C#操作Excel2000/Xp中列宽度的代码,在线等了!
- c#中如何实现如vb.net中的 Format(Calendar1.SelectedDate, "yyyy/MM/dd")
- 有关datagrid动态绑定时如何只编辑一列的问题及如何动态修改一行颜色?
- 连数据库的问题。很急在线等。
- 求助:在我自已写的类中,如何使用MDI主窗口中的状态栏里的进度条控件。多谢!
- 请问各位老大,怎么在office里的宏中打开其他的应用程序?
{
writeFileLog
}
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070130http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx
你定义的那个静态变量有什么用啊,还有我现在还有个问题是,多个线程写文件的时候无法最加在一起,总是最后一个线程写的信息.