2

私は次のコードを持っています:

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);
        }

この時点で、ワーカースレッドは5000msごとに文字列をエコーするだけです。問題は、印刷された文字列がユーザーの入力済みテキストと重なることです。これは理想的ではなく、非常に見苦しく見えます(ただし、Console.ReadLineによって返される実際のデータには影響しません)。

この重複を防ぐ方法はありますか?

4

2 に答える 2

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;
        }
于 2012-05-25T04:55:14.493 に答える
0

Console.WriteLine()の後にConsole.Out.Flush()を使用してみましたか?バッファから出力ストリームにデータを出力する必要があります。

于 2012-05-25T04:45:40.473 に答える