.NET 4.x Потокозащищенное логирование - C#
Формулировка задачи:
Здравствуйте. Прошу помощи!
Есть проблемы с записью логов в файл:
1. тупо не дописывает часть из коллекции
2. выкидывает исключение что файл занят другим процессом
Подскажите пожалуйста как исправить и защититься от подобного.
public class Logger
{
public static Thread LogWriter;
public static ConcurrentQueue<string> Rows = new ConcurrentQueue<string>();
public static string FileName { get; set; }
public bool Enable { get; set; }
public void Start()
{
LogWriter.IsBackground = true;
LogWriter.Start();
}
public Logger(Thread thread, string fileName, bool enable)
{
LogWriter = thread;
FileName = fileName;
Enable = enable;
}
public static void WriteRow(string log)
{
Rows.Enqueue(log);
}
public static void WriteLogFile()
{
while (true)
{
using (StreamWriter file = new StreamWriter(File.Create(FileName)))
{
foreach (string s in Rows)
file.WriteLine(s);
}
}
}
private static string Time()
{
return DateTime.Now.ToString();
}
}
class Programm
{
public static void Work()
{
Logger.WriteRow(Guid.NewGuid().ToString());
Console.WriteLine(Logger.Rows.Count);
}
public static void Main()
{
new Logger(new Thread(delegate () { Logger.WriteLogFile(); }), "test.txt", true).Start();
for (int i=0; i < 100; i++)
new Thread(Work).Start();
}
}Решение задачи: «.NET 4.x Потокозащищенное логирование»
textual
Листинг программы
using System;
using System.Windows.Forms;
namespace LoggerThread
{
public partial class Form1 : Form
{
private Logger mLogger;
public Form1()
{
InitializeComponent();
this.mLogger = new Logger();
}
private void button1_Click(object sender, EventArgs e)
{
this.mLogger.HandleLog(DateTime.Now.ToLongTimeString());
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
this.mLogger.Dispose();
}
}
}