2

我有以下代码:

bool loop = true;
        LongbowWorkerThread Worker = new LongbowWorkerThread();
        Thread w = new Thread(Worker.UpdateChannel);
        w.Start();

        string inText = string.Empty;

        while (loop) {
            inText = Console.ReadLine();
            Console.WriteLine(inText);
        }

此时,工作线程只是每 5000 毫秒回显一个字符串。问题是打印的字符串与用户已经输入的文本重叠,这并不理想并且看起来很丑陋(尽管它不会影响 Console.ReadLine 返回的实际数据。)

有没有办法防止这种重叠?

4

2 回答 2

4

您可以使用Console.CursorLeftConsole.CursorRight属性来记录光标位置、移动它、输出您的文本,然后将其移回。

编辑:这是我刚刚拼凑的一个示例,根据我对其进行的 60 秒测试效果很好。

        int fooCursorTop = Console.CursorTop + 1;

        var timer2 = new System.Timers.Timer(1000);
        timer2.Elapsed += new System.Timers.ElapsedEventHandler(delegate
            {
                int tempCursorLeft = Console.CursorLeft;
                int tempCursorTop = Console.CursorTop;
                Console.CursorLeft = 0;
                Console.CursorTop = fooCursorTop;
                Console.WriteLine("Foo");
                Console.CursorLeft = tempCursorLeft;
                Console.CursorTop = tempCursorTop;
                fooCursorTop++;
            });
        timer2.Start();

        string input = string.Empty;
        while (input != "quit")
        {
            input = Console.ReadLine();
            Console.CursorTop = fooCursorTop;
            Console.WriteLine(input);
            fooCursorTop += 2;
        }
于 2012-05-25T04:55:14.493 回答
0

您是否尝试在 Console.WriteLine() 之后使用 Console.Out.Flush()?它应该将数据从缓冲区发送到输出流。

于 2012-05-25T04:45:40.473 回答