У меня есть приложение, которое использует регистратор.Один и тот же регистратор может писать из разных программ в один и тот же файл.Он используется для длительных казней.
Только после того, как я получил следующую ошибку:
Ссылочная строка:
swLogger.WriteLine(newLines);
Я обнаружил одну и ту же проблему, упоминаемую в различных сетевых потоках, в основном с Console.WriteLine.Я должен признать, что, помимо их чтения, у меня все еще нет полного понимания проблемы.
Поскольку это произошло только один раз, я не смог воспроизвести проблему.
Сказав это, если мое понимание проблемы не ошибочно, можно было бы решить проблему с помощью lock инструкция, охватывающая всю процедуру?
Код:
public static bool WriteLog(string newLines, bool AddDateTime = true, bool ShowMessageBox = false)
{
try
{
long max = MaxLogSizeMB * 1024 * 1024;
if (lenTot > max)
{
if (swLogger != null)
swLogger.Close();
File.Delete(FileName);
swLogger = new StreamWriter(FileName);
lenTot = 0;
}
if (AddDateTime)
newLines = "[" + DateTime.Now.ToString("dd/MM/yy HH:mm:ss.fff") + "] " + newLines;
lenTot += newLines.Length + 2;//Environment.Newline
swLogger.WriteLine(newLines);<-----
return true;
}
catch (Exception exc)
{
return false;
}
}
Таким образом, поток регистратора открывается в начале, записывается все время и закрывается в конце.
Заранее спасибо за любую помощь
Патрик