C
Coder
Здравствуйте, программисты!
Есть класс, отвечающий за логирование. Он записывает данные в текстовой файл:
Есть класс, отвечающий за логирование. Он записывает данные в текстовой файл:
class TxtLogger : ILogger
{
protected FileStream f1;
protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
protected string CurrentLogText;
protected StreamWriter output;
protected Queue lgrMsg = new Queue();
public void Log(string message, MessageType messageType)
{
CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
lgrMsg.Enqueue(CurrentLogText);
f1 = new FileStream(FileName, FileMode.Append);
output = new StreamWriter(f1);
while (lgrMsg.Count > 0)
{
output.WriteLine(lgrMsg.Dequeue());
}
output.Close();
f1.Close();
}
}
Если метод этого класса вызывается в одном потоке (много раз), всё работает хорошо. Но как только я пытаюсь вызвать его из двух потоков одновременно, выскакивает ошибка (exeption), которая говорит, что текстовой файл используется другим процессом.
Я понимаю, что нельзя одновременно записывать в один файл из двух потоков, поэтому организовал очередь (Queue). Но проблема не решилась.
Прошу помочь, а то уже долго мучаюсь. Спасибо!
{
protected FileStream f1;
protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
protected string CurrentLogText;
protected StreamWriter output;
protected Queue lgrMsg = new Queue();
public void Log(string message, MessageType messageType)
{
CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
lgrMsg.Enqueue(CurrentLogText);
f1 = new FileStream(FileName, FileMode.Append);
output = new StreamWriter(f1);
while (lgrMsg.Count > 0)
{
output.WriteLine(lgrMsg.Dequeue());
}
output.Close();
f1.Close();
}
}
Если метод этого класса вызывается в одном потоке (много раз), всё работает хорошо. Но как только я пытаюсь вызвать его из двух потоков одновременно, выскакивает ошибка (exeption), которая говорит, что текстовой файл используется другим процессом.
Я понимаю, что нельзя одновременно записывать в один файл из двух потоков, поэтому организовал очередь (Queue). Но проблема не решилась.
Прошу помочь, а то уже долго мучаюсь. Спасибо!