このインターフェイスを実装するオブジェクトを提供する必要があるライブラリを使用しています。
public interface IConsole {
TextWriter StandardInput { get; }
TextReader StandardOutput { get; }
TextReader StandardError { get; }
}
次に、オブジェクトのリーダーは、ライブラリによって次のように使用されます。
IConsole console = new MyConsole();
int readBytes = console.StandardOutput.Read(buffer, 0, buffer.Length);
通常、IConsoleを実装するクラスには、外部プロセスからのStandardOutputストリームがあります。その場合、console.StandardOutput.Read呼び出しは、StandardOutputストリームに書き込まれるデータが得られるまでブロックすることで機能します。
私がやろうとしているのは、MemoryStreamsを使用するテストIConsole実装を作成し、StandardInputに表示されるものをStandardInputにエコーバックすることです。私は試した:
MemoryStream echoOutStream = new MemoryStream();
StandardOutput = new StreamReader(echoOutStream);
しかし、それに関する問題は、いくつかのデータが得られるまで、console.StandardOutput.Readがブロックではなく0を返すことです。とにかく、利用可能なデータがない場合にMemoryStreamをブロックすることができますか、または使用できるメモリストリームに別のものがありますか?