我正在构建一个C#
控制台应用程序,并希望将前奏符号自定义为其他内容,例如">"。我检查了类的属性,Console
找不到任何人在做这项工作。作为一种解决方法,在代码中我在写任何新行之前写一个“>”符号。但这并不是一个完美的解决方案,尤其是当有后台工作线程打印消息时,有时前奏符号会丢失,因为工作线程可能会在主线程编写前奏之前更早地写入消息。
我在网上搜索但没有找到任何提示,有没有标准的解决方案?
我正在构建一个C#
控制台应用程序,并希望将前奏符号自定义为其他内容,例如">"。我检查了类的属性,Console
找不到任何人在做这项工作。作为一种解决方法,在代码中我在写任何新行之前写一个“>”符号。但这并不是一个完美的解决方案,尤其是当有后台工作线程打印消息时,有时前奏符号会丢失,因为工作线程可能会在主线程编写前奏之前更早地写入消息。
我在网上搜索但没有找到任何提示,有没有标准的解决方案?
如果这不可能开箱即用,我建议提供一个自定义类,该类封装Console
您将在后台线程中使用的类,以将消息写入控制台。这也将使单元测试更容易。
public class ClassInOtherThread
{
private readonly IConsoleWriter _consoleWriter;
public ClassInOtherThread(IConsoleWriter consoleWriter)
{
this._consoleWriter = consoleWriter;
}
public void DoSomething()
{
_consoleWriter.Write("something");
}
}
public interface IConsoleWriter
{
void Write(string value);
}
public class ConsoleWriter : IConsoleWriter
{
public void Write(string value)
{
// Fix your > problems in this class
Console.Write(value);
}
}
有没有标准的解决方案?
不。
当 Aphelion 说要创建一个自定义类来处理这个问题时,他一针见血。
public static class I
{
public string preclude = ">";
public static void WriteLine(string message)
{
Console.WriteLine(preclude+message);
}
public static void ReadLine()
{
Console.Write(preclude);Console.ReadLine();
}
}
因为您有一个后台线程写入控制台,您还应该检查以确保您没有冲突的写入行,例如当您要求用户输入时。您必须Console.MoveBufferArea
在您的线程中实现,该线程在要求用户输入时写入,否则如果用户正在输入,您将遇到问题。
在您的代码中更新也很容易,只需将 Console.WriteLine 替换为 I.Console.WriteLine。