0

常に(つまり、通常は数秒ごとに)コンソールに書き出す.NET4.0コンソールアプリケーションを構築しています。これはマルチスレッドアプリであり、さまざまなスレッドがさまざまな時間にコンソールに書き込みます。

問題は、これがすべて起こっている間、ユーザー入力を受け入れたいということです。ユーザー入力はいつでも発生する可能性があります。

私は2つの異なる方法を試しましたが、どちらもうまくいきませんでした。

  1. を探して、別のスレッドを使用して読んでみましたConsole.KeyAvailable。これは「機能」しましたが、入力しようとしたときに文字列が出力に書き込まれていたため、非常に混乱していました。これにより、入力中にカーソルが動き回り、方向が乱れていました。

  2. Console.SetCursorPositionコンソールを2つの「ペイン」に分割するために使用してみました。上に出力し、下に入力します。これもうまくいきましたがConsole.Clear()、毎回画面を描いてから電話する必要があります。これは非常に遅く、狂った画面のちらつきを引き起こしました。

私の他の唯一のオプションは、コンソールをエミュレートするWindowsフォームアプリまたはWPFアプリを作成することのようです。私がしたいのは自発的なユーザー入力を受け入れることだけなので、これはばかげているようです。

私のgoogle-fuは、有効なコンソールの代替品や、コンソールをシミュレートする.NETアプリを作成した人を見つけませんでした。

私はここで立ち往生していますか?

4

2 に答える 2

1

それは可能ですが、難しいです。それは私が試すことをお勧めするものではありません。設定したカスタムを作成する必要がありTextWriterます(Console.SetOut)。これTextWriterにより、コンソールウィンドウの下部に1行または2行が残り、書き込みに使用できるようになります。自分でウィンドウをスクロールしたり、自分でカーソルを置いたりする必要があります。また、行の折り返しや腐敗についても心配する必要があります。それは...腹立たしいです。

それを試してみたい場合は、コンソールAPIとその.NETラッパーに関する深い知識が必要です。数年前に.NETラッパーを公開しました。あなたはそのラッパーでこれをすべて行うことができます。ラッパーはhttp://mischel.com/pubs/consoledotnet.zipからダウンロードできます。

私はそれについて3つの記事を書きましたが、そのうちの2つはまだ利用可能です。見る

http://www.devsource.com/c/a/Using-VS/Working-with-Console-Screen-Buffers-in-NET/

http://www.devsource.com/c/a/Using-VS/Console-Input-in-NET/

于 2012-04-13T23:41:38.520 に答える
0

コンソールウィンドウを2つだけ持つのはどうですか?1つは入力用、2つ目は出力用です。WinApiを使用してコンソールウィンドウを作成できます。

于 2012-04-13T21:50:16.237 に答える