您当前的位置:KKBlog > 学无止境 > ASP.NET

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

 
二维码
意见反馈 二维码