Mac OS のターミナルのようなコマンドを入力して特定のことを行うプロジェクトを開発しています。問題は、 メソッドConsole.ReadLine
とConsole.ReadKey
メソッドが互いにスレッドを共有しないことです。
たとえば、 を使用して文字列を入力しているときに ESC を押すと終了するプログラムを作成していますConsole.ReadLine
。
私は次の方法でこれを行うことができます:
ConsoleKeyInfo cki;
while (true)
{
cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.Escape)
break;
Console.Write(cki.KeyChar);
// do something
}
しかし、この方法の問題点は、Backspace キーを押しても、コンソールに入力した入力文字列の最後の文字が消去されないことです。
この問題を解決するには、入力文字列を保存し、Backspace キーが押されたときにコンソール画面を初期化してから、保存した文字列を再度出力します。しかし、以前に入力した文字列の記録を保存したい、初期化したくない。
で印刷済みの文字列の一部をクリアする方法Console.Write
や、 で文字列を入力中に特定のキーを押したときに発生するイベントがあればConsole.ReadLine
、上記の問題は簡単に解決できます。