How do I make a static class thread-safe?
public static class Logger{ private static readonly string LOG_FILENAME = "logfile.txt"; private static readonly string LOG_FOLDER = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name"); private static readonly string LOG_FULLPATH = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name", LOG_FILENAME); private static Object theLock=new Object(); public static void LogMessageToFile(string msg) { msg = string.Format("{0:G}: {1}{2}", DateTime.Now, msg, Environment.NewLine); lock (theLock) { File.AppendAllText(LOG_FULLPATH, msg); } }}
In your LogMessageToFile method, you need a lock to prevent multi-thread accessing:
private static Object _mylock = new Object();public static void LogMessageToFile(string msg){ lock(_mylock) { msg = string.Format("{0:G}: {1}{2}", DateTime.Now, msg, Environment.NewLine); File.AppendAllText(LOG_FULLPATH, msg); }}