我正在尝试通过制作一个简单的小游戏来了解 C# 线程。我遇到了一些我当然可以使用帮助的问题。
我的愿望是同时输入和输出。线程的输出将出现在屏幕的顶部,而用户的输入可以输入到屏幕的底部。我遇到的问题是,为了刷新屏幕,当我使用 时Console.Clear()
,它也会清除用户输入的任何内容!下面我附上了我正在尝试做的一个极其简化的版本(为了避免不必要的代码妨碍实际问题)。
请注意:虽然在这个例子中我只更新屏幕顶部的一个字符,但我的实际程序会在屏幕顶部和中间有很多文本,这些文本会随着每个刻度不断变化(我计划在 1.5 秒内使用)。
任何想法都会很棒!我还是 C# 编程的新手,如果你能提供任何帮助,我会很高兴 :) 我唯一关心的是设计。顶部是系统输出,底部是用户输入,前面是“>”。如果我这样做的方式是错误的,那么将它全部扔出窗外并以不同的方式进行操作是没有问题的。
编辑:我的目标是让屏幕顶部的输出文本每 1.5 秒更新一次(每次运行计数线程),同时允许用户在屏幕底部输入。但是,我使用的方法(清除然后将新内容写入屏幕)也消除了用户的输入!它使得每 1.5 秒用户输入的任何输入都会消失,这是正确的,因为这正是 Console.Clear 所做的。所以我正在寻找一种新的方法来完成这项任务。
简而言之:如何在允许用户继续在屏幕底部输入的同时更新屏幕顶部/中间的文本?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static int i = 0;
static void Main(string[] args)
{
Thread tickThread = new Thread(new ThreadStart(CountThread));
Thread userThread = new Thread(new ThreadStart(UserInput));
tickThread.Start();
Thread.Sleep(1);
userThread.Start();
Thread.Sleep(20000);
tickThread.Abort();
userThread.Abort();
}
static void UserInput()
{
string input = "";
while (true)
{
input = Console.ReadLine();
}
}
static void CountThread()
{
while (true)
{
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.WriteLine(i);
i++;
Console.SetCursorPosition(0, Console.WindowHeight - 1);
Console.Write("> ");
Thread.Sleep(1500);
}
}
}
}