Is it possible to write to the console in colour in .NET?
写一个小的命令行工具,用不同的颜色输出会更好。这有可能吗?
对。请参阅本文。下面是一个例子:
1 2 3 | Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("White on blue."); |
1 2 3 4 5 6 7 8 9 10 11 | class Program { static void Main() { Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("White on blue."); Console.WriteLine("Another line."); Console.ResetColor(); } } |
从这里拿走。
上面的评论都是可靠的响应,但是请注意它们不是线程安全的。如果您使用多个线程写入控制台,更改颜色将添加一个竞争条件,该条件可能会创建一些奇怪的输出。但很容易修复:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class ConsoleWriter { private static object _MessageLock= new object(); public void WriteMessage(string message) { lock (_MessageLock) { Console.BackgroundColor = ConsoleColor.Red; Console.WriteLine(message); Console.ResetColor(); } } } |
我创建了一个小插件(在nuget上可用),允许您在控制台输出中添加任何颜色(如果终端支持的话),而不受经典解决方案的限制。
它通过扩展
1 | "colorize me".Pastel("#1E90FF"); |
支持前景色和背景色。
是的,这很容易,也很容易摆姿势。定义第一个默认颜色。
1 2 3 | Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Clear(); |
然后您可以更改每个打印的颜色:
1 2 3 | Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Red text over black."); |
完成程序后,请记住完成时重置控制台颜色:
1 2 | Console.ResetColor(); Console.Clear(); |
现在对于Netcore,如果您想"保留"用户体验,我们还有另一个问题,因为终端在每个操作系统上有不同的颜色。
我正在制作一个库,用文本格式来解决这个问题:颜色、对齐方式等等。自由使用和贡献。
https://github.com/deinsoftware/colorify/也可以作为nuget包提供
Windows/Linux的颜色(深色):
MacOS颜色(浅色):
是的,可能如下。这些颜色可以在控制台应用程序中查看一些红色等错误。
1 2 3 4 5 | Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.White;//after this line every text will be white on blue background Console.WriteLine("White on blue."); Console.WriteLine("Another line."); Console.ResetColor();//reset to the defoult colour |