C#,多线程:进程无法访问该文件,因为它正由另一个进程使用

时间:2017-12-24 07:14:54

标签: c# multithreading io access-denied

我在Windows和Android中测试的多线程应用程序中发现了一个问题, 问题是关于线程锁定状态和处理文件。 当我使用锁定对象打开另一个线程中的文件时,这将正常工作,但是当我中止线程时(我认为)所有锁定状态都将从锁定中断,我将得到:

  

该进程无法访问该文件,因为该文件正由另一个进程

使用

我在控制台应用程序中创建了一个示例项目,您可以对其进行测试:

public class Program
{
    static void Main(string[] args)
    {
        List<Thread> threads = new List<Thread>();
        for (int i = 0; i < 300; i++)
        {
            threads.Add(MakeThreadRunning());
        }
        foreach (var item in threads)
        {
            item.Abort();
        }
        Console.WriteLine("finish");
        Console.ReadKey();
    }

    static object lockAccess = new object();
    static Thread MakeThreadRunning()
    {
        Thread thread = new Thread(()=>
        {
            try
            {
                while (true)
                {
                    lock(lockAccess)
                    {
                        using (var stream = new FileStream(@"D:\file.rar", FileMode.Open, FileAccess.ReadWrite))
                        {
                            Thread.Sleep(100);
                        }
                    }
                }
            }
            catch (Exception ex)
            {

            }
        });
        thread.IsBackground = false;
        thread.Start();
        return thread;
    }
}

0 个答案:

没有答案