Я использую библиотеку, для которой требуется предоставить объект, реализующий этот интерфейс:
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.
То, что я пытаюсь сделать, это создать тестовую реализацию IConsole, которая использует MemoryStreams и повторить все, что появляется в StandardInput, на StandardInput. Я пробовал:
MemoryStream echoOutStream = new MemoryStream();
StandardOutput = new StreamReader(echoOutStream);
Но проблема в том, что это console.StandardOutput.Read вернет 0, а не заблокирует, пока не появится некоторая информация. Есть ли в любом случае, я могу заставить MemoryStream блокировать, если нет данных или есть другой в потоке памяти, который я мог бы использовать?