我使用以下内容来清空 txt 文件:
System.IO.File.WriteAllText(path, string.Empty);
当我一次运行多个线程并且他们尝试同时访问文件时,问题就出现了。
关于简单修复的任何想法?:)
多线程来拯救!
您应该使用Monitor
,AutoResetEvent
或lock
块(实际上它是一个监视器)以同步对整个文件的访问。
public class SomeClass
{
private readonly static object _sync = new object();
public void WriteAllText()
{
lock(_sync)
{
File.WriteAllText("myfile.txt", "Hello world from a synchronized file access!!!");
}
}
}
}
这样你就可以防止多个线程同时访问同一个文件。
在此处了解lock
块:
http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.110).aspx
你可能应该调查一下FileStream
。有一个很好的例子说明你在这里尝试做什么。
我会考虑的另一种方法是让一个队列为单个编写器线程提供服务。想要写入文件的所有其他线程通过将文本项添加到队列末尾来执行此操作。writer 线程从队列的前面删除文本项并将它们写入文件。您可以使用 lock 语句来同步对队列对象的访问,并使用 AutoResetEvent 对象在向队列中添加内容时向编写者线程发出信号,让其知道队列中有需要处理的内容。