我有以下代码:
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返回的实际数据。)
有没有办法防止这种重叠?
答案 0 :(得分:4)
您可以使用Console.CursorLeft和Console.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()?它应该从缓冲区向输出流发送数据。