经过大量研究,并阅读并尝试了所有的问题后,我认为是时候寻求一些帮助了。
我有一个C#应用程序,正在尝试使用不同的线程在同一个文件中写入。
public static void LaunchThreads(string path_file)
{
int i = 0;
Dictionary<int, Thread> threadsdico = new Dictionary<int, Thread>();
while (i < MAX_THREAD)
{
Thread thread = new Thread(() => ThreadEntryWriter(string path_file));
thread.Name = string.Format("ThreadsWriters{0}", i);
threadsdico.Add(i, thread);
thread.Start();
i++;
}
int zz = 0;
while (zz < threadsdico.Count())
{
threadsdico[zz].Join();
zz++;
}
}
private static readonly Object obj = new Object();
public static void ThreadEntryWriter(string path_file)
{
int w = 0;
while (w < 99)
{
string newline = w + " - test" + "\r";
lock(obj)
{
string txt = File.ReadAllText(path_file);
using (TextWriter myWriter = new StreamWriter(path_file))
{
TextWriter.Synchronized(myWriter).Write(txt + newline);
}
}
w++;
}
}
我已经尝试了各种方法,我的代码是全局的,但是我已经尝试了各种方法,包括每种锁、每种文件打开方法,但我仍然不断收到“因为正在使用而无法访问文件”的错误消息。生成此错误的行是:
using (TextWriter myWriter = new StreamWriter(path_file))
。我尝试了很多方法,比如关闭文件等,但当多个线程同时开始工作时,程序会停止并给出错误消息
因为正在使用而无法访问文件
(自解释)。但我不明白为什么,锁应该阻止另一个线程进入此处。而我使用了Synchronized方法进行编写,这是线程安全的。对于长篇大论,敬请谅解,这是我在这里的第一篇帖子。
File.WriteAllText
而不是流写入器,会出现相同的错误吗? - Ivan LeonenkoTextWriter.Synchronized
返回一个新实例(原始 TextWriter 的包装器)。也许您也需要 "Dispose" 该实例? - John Wu