簡単な小さなゲームを作って、C#スレッドの使い方を学ぼうとしています。私は確かに助けを使うことができる少しの問題に遭遇しました。
私の望みは、入力と出力を同時に行うことです。スレッドからの出力は画面の上部に表示され、ユーザーの入力は画面の下部に入力できます。私が遭遇している問題は、画面を更新するために、を使用するConsole.Clear()
と、ユーザーが入力しているものがすべて消去されることです。以下に、私がやろうとしていることの非常に単純化されたバージョンを添付しました(実際の問題の邪魔になる不要なコードを避けるため)。
注:この例では、画面上部の1文字のみを更新していますが、実際のプログラムでは、画面の上部と中央全体に大量のテキストがあり、ティックごとに絶えず変化します(これは私が計画しています)。 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);
}
}
}
}