如何更改C#控制台应用程序的命令提示符

时间:2013-06-06 07:25:34

标签: c# console command-prompt

我正在构建一个C#控制台应用程序,并希望将前奏符号自定义为其他内容,例如“>”。我检查了类Console的属性,找不到任何人做这项工作。作为一种解决方法,在代码中我在写任何新行之前写了一个“>”符号。但这不是一个完美的解决方案,特别是当有后台工作者线程打印消息时,有时候前导符号会丢失,因为工作线程可能会在主线程编写前奏之前写入消息。

我搜索了网页,但没有找到任何提示,是否有标准解决方案?

2 个答案:

答案 0 :(得分:2)

如果开箱即不可行,我建议提供一个自定义类,它封装您将在后台线程中使用的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);
    }
}

答案 1 :(得分:1)

  

有一个标准的解决方案吗?

没有

当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。