Po wielu badaniach i po przeczytaniu i wypróbowaniu wszystkich pytań tutaj, myślę, że nadszedł czas, aby poprosić o pomoc.Wielowątkowa blokada odczytu/zapisu tekstu C#
Mam aplikację w języku C# i próbuję pisać w pliku SAME z innym wątkiem.
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++;
}
}
mam spróbować wszystkiego, mój kod jest globalnie tak, ale mam spróbować każdy sposób, z każdym zamkiem, każdej metody plików otwarte, ale wciąż otrzymuję The process cannot access the files because it's in use
. Wiersz, który generuje ten błąd, jest ten using (TextWriter myWriter = new StreamWriter(path_file))
.
Próbowałem wiele rzeczy, zamykając pliki itp., Ale gdy wątki zaczynają działać w tym samym czasie, program zatrzymuje się i daje mi błąd The process cannot access the files because it's in use
(samouzupełnianie). Ale nie rozumiem, dlaczego zamek ma zablokować inny wątek, aby tu wejść. I użyłem metody zsynchronizowanej do napisania, która jest bezpieczna dla wątków. Bardzo przepraszam za długie pisanie, to mój pierwszy post tutaj.
"zatrzymaj program i daj mi błąd." - czy możesz podzielić się swoim błędem? –
Czy na pewno nie ma innego kodu, który otwiera plik? Jeśli tak, wyłącz skanery antywirusowe i spróbuj ponownie. –
Błąd jest podobny do "Proces nie może uzyskać dostępu do plików, ponieważ jest w użyciu". – tucotraff