.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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д