在Console.ReadLine期间使用Console.WriteLine

时间:2012-05-25 03:51:17

标签: c# mono console-application

我有以下代码:

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返回的实际数据。)

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

2 个答案:

答案 0 :(得分: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;
        }

答案 1 :(得分:0)

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