我在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;
}
}