Хорошо, проще говоря, вам нужно создать статический класс ThreadSafe. Ниже приведены некоторые фрагменты кода, делегат, который вы вызываете из любого потока, это указывает на правильный поток, который затем вызывает функцию WriteToFile.
Когда вы запускаете приложение, в которое хотите войти, передайте ему следующее, где LogFile - это имя файла и путь к вашему файлу журнала.
Log.OnNewLogEntry += Log.WriteToFile (LogFile, Program.AppName);
Тогда вы хотите поместить это в ваш статический класс Logging. Бит мастера - это функция ThreadSafeAddEntry, которая гарантирует, что вы находитесь в правильном потоке для записи строки кода.
public delegate void AddEntryDelegate(string entry, bool error);
public static Form mainwin;
public static event AddEntryDelegate OnNewLogEntry;
public static void AddEntry(string entry) {
ThreadSafeAddEntry( entry, false );
}
private static void ThreadSafeAddEntry (string entry, bool error)
{
try
{
if (mainwin != null && mainwin.InvokeRequired) // we are in a different thread to the main window
mainwin.Invoke (new AddEntryDelegate (ThreadSafeAddEntry), new object [] { entry, error }); // call self from main thread
else
OnNewLogEntry (entry, error);
}
catch { }
}
public static AddEntryDelegate WriteToFile(string filename, string appName) {
//Do your WriteToFile work here
}
}
И, наконец, написать строку ...
Log.AddEntry ("Hello World!");