Mam klasę logger, która obsługuje wyświetlanie różnych informacji w pięknych kolorach (yay.). Ponieważ jednak zapisuje na konsolę w , oddzieliłem kroki (tj. Ustawiono kolor na czerwony, pisz tekst, ustaw kolor na szary, pisz tekst, dla czegoś, co renderowałoby "[Błąd] Opis ..." z błędem będącym na czerwono), ale mam aplikację wielowątkową, więc kroki mogą się pomieszać i wydrukować losowe rzeczy w przypadkowych kolorach.Jak zablokować konsolę dla wątków w C# .NET?
Jestem świadomy słowa kluczowego lock
, jednak nie będzie działać z klasą statyczną, taką jak konsola.
Oto przykład kodu gdybym była niejasna:
using System;
using System.Text;
namespace N.Utilities.IO
{
public static class Logger
{
private static void WriteColored(string value, ConsoleColor color)
{
if (Logger.UseColor)
{
Console.ForegroundColor = color;
Console.Write(value);
Console.ForegroundColor = ConsoleColor.Gray;
}
else
{
Console.Write(value);
}
}
private static void WriteLineColored(string value, ConsoleColor color)
{
if (Logger.UseColor)
{
Console.ForegroundColor = color;
Console.WriteLine(value);
Console.ForegroundColor = ConsoleColor.Gray;
}
else
{
Console.Write(value);
}
}
private static bool useColor = true;
public static bool UseColor
{
get
{
return Logger.useColor;
}
set
{
Logger.useColor = value;
}
}
public static void Inform(string value)
{
Logger.WriteColored(" [Info] ", ConsoleColor.White);
Console.WriteLine(value);
}
public static void Warn(string value)
{
Logger.WriteColored(" [Warning] ", ConsoleColor.Yellow);
Console.WriteLine(value);
}
public static void Error(string value)
{
Logger.WriteColored(" [Error] ", ConsoleColor.Red);
Console.WriteLine(value);
}
}
Wielkie dzięki: Dokładnie to, czego potrzebowałem. – Lazlo
@jasonh Co, jeśli inna aplikacja zapisuje do konsoli w międzyczasie? (które oczywiście nie używa tego rejestratora) –