После много исследований, и после прочтения и рассмотрения всех вопросов здесь, я думаю, пришло время попросить о помощи.Многопоточность блокировки чтения/записи текста C#
У меня есть приложение на C#, и я пытаюсь записать в SAME файл с другим потоком.
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++;
}
}
Я все попробовать, мой код глобально так, но я стараюсь всячески, с каждым замком, каждый файл открытым способом, но я получаю The process cannot access the files because it's in use
. Строкой, которая генерирует эту ошибку, является этот using (TextWriter myWriter = new StreamWriter(path_file))
.
Я пробовал много вещей, закрывая файлы и т. Д., Но когда потоки начинают работать в одно и то же время, программа останавливается и дает мне ошибку The process cannot access the files because it's in use
(самообучаться). Но я не понимаю, почему блокировка предполагает блокировать другой поток, чтобы войти сюда. И я использовал метод Synchronized для записи, который является потокобезопасным. Ну, извините за длинное письмо, это мой первый пост здесь.
«программа остановится и дайте мне ошибку». - можете ли вы поделиться своей ошибкой? –
Уверены ли вы, что нет другого кода, который откроет файл? Если да - выключите антивирусные сканеры и повторите попытку. –
Ошибка - это что-то вроде «Процесс не может получить доступ к файлам, потому что он используется». – tucotraff