C#多线程操作文件(lock的使用)
在某些情况下,我们经常需要使用到多线程做一些操作,比如操作文件,如果在多线程中操作同一个文件,必然会发生多个线程同时操作文件的情况,那么此时会报“文件已经被其它程序打开”之类的错误。解决方法就是使用lock关键字进行锁定。
下面是实例代码:
private void btnStart_Click(object sender, EventArgs e)
{
//启动5个线程
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(WriteFile);
t.Name = "线程" + i.ToString();
t.Start();
}
}
//定义一个私有的(private)的object变量
private object obj = new object();
//定义一个变量用来做线程结束的条件
static int i = 0;
void WriteFile()
{
while (i < 100)
{
//为了避免多个线程同时操作该文件,使用lock关键字进行锁定,只允许一个线程操作,直到该线程操作完毕退出后,其它线程才允许操作
lock (obj)
{
i++;
StreamWriter sw = new StreamWriter("测试文本.txt", true);
sw.WriteLine(string.Format("{0} 来自{1}的操作!(来源:秋风雅居<http://www.weixq.cn>)", DateTime.Now, Thread.CurrentThread.Name));
sw.Close();
}
}
//循环条件成立,线程结束
lock (obj)
{
i++;
StreamWriter sw = new StreamWriter("测试文本.txt", true);
sw.WriteLine(string.Format("{0} {1}已终止!", DateTime.Now, Thread.CurrentThread.Name));
sw.Close();
}
}