c# - 如何在等待 ReadLine 时更新 C# Windows 控制台应用程序中的当前行?

标签 c# console readline

在使用 C# 构建 Windows 控制台应用程序时,是否可以在等待读取行时更新控制台中的行?

我当前的代码是:

do
{
    Console.Clear();
    Console.WriteLine("RA:     " + scope.RightAscension);
    Console.WriteLine("Dec:    " + scope.Declination);
    Console.WriteLine("Status: " + scope.Slewing);
    System.Threading.Thread.Sleep(1000);
} while (true);

最佳答案

是的。您可以在 Console.ReadLine 上阻塞时从单独的线程写入控制台。

话虽如此,这会引起混淆。在您的例子中,您将清除用户在行的中途键入的内容(通过 Console.Clear()),并显着移动光标位置。


编辑:这是一个说明这一点的例子:

namespace ConsoleApplication1
{
    using System;
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting");

            ThreadPool.QueueUserWorkItem(
                cb =>
                    {
                        int i = 1;
                        while (true)
                        {
                            Console.WriteLine("Background {0}", i++);
                            Thread.Sleep(1000);
                        }
                    });
            Console.WriteLine("Blocking");
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
        }
    }
}

如果您运行它,您会看到控制台在 ReadLine 上等待,但后台线程仍在打印。

关于c# - 如何在等待 ReadLine 时更新 C# Windows 控制台应用程序中的当前行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907679/

相关文章:

C# 了解阻塞 UI 和异步/等待与 Task.Run 的麻烦?

c - 如何在使用 GNU readline 从 stdin 读取时将消息输出到另一个线程上的 stdout 而不会弄乱输入?

将 `getSymbols()` 的输出作为数据帧返回

bash - 如何使用 BASH 和 ZSH 向用户呈现可编辑的输入?

c# - 如何在检索时为字典值指定通用类型转换

c# - 如何获取随机索引的 DropDownList 值?

c# - 为特定索引伪造对数组的调用会引发异常

c# - 使用 Console.Read() 确定文件结尾 C#

运行控制台命令的 C# 问题

Java多线程应用程序System.out.println产生延迟