Laz*_*zlo 9 c# console logging locking
我有一个记录器类,处理各种颜色的信息显示(耶.).但是,因为它以分开的步骤写入控制台(即将颜色设置为红色,写入文本,将颜色设置为灰色,写入文本,以便呈现"[错误]描述...",错误为红色) ,但我有一个多线程应用程序,所以步骤可以混淆和随机颜色打印随机的东西.
我知道lock关键字,但它不适用于静态类,如控制台.
如果我不清楚,这是一些示例代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
jas*_*onh 21
你的班级需要:
private static readonly object ConsoleWriterLock = new object();
Run Code Online (Sandbox Code Playgroud)
然后你可以在写入控制台之前锁定它.
lock(ConsoleWriterLock)
{
//Your code here
}
Run Code Online (Sandbox Code Playgroud)
lock关键字将与静态类一起使用,您只需要提供一个static readonly要锁定的对象.
| 归档时间: |
|
| 查看次数: |
5444 次 |
| 最近记录: |