Ich verwende eine Bibliothek, für die ich ein Objekt bereitstellen muss, das diese Schnittstelle implementiert:
%Vor%Die Leser des Objekts werden dann von der Bibliothek verwendet mit:
%Vor%Normalerweise hat die Klasse, die IConsole implementiert, den StandardOutput-Stream als von einem externen Prozess kommend. In diesem Fall funktionieren die console.StandardOutput.Read-Aufrufe, indem sie blockieren, bis Daten in den StandardOutput-Stream geschrieben werden.
Was ich versuche, ist eine Test-IConsole-Implementierung zu erstellen, die MemoryStreams und Echos, die auf dem StandardInput erscheinen, auf den StandardInput zurücksetzt. Ich habe es versucht:
%Vor%Aber das Problem damit ist die console.StandardOutput.Read wird 0 zurückgeben, anstatt zu blockieren, bis es einige Daten gibt. Gibt es überhaupt einen MemoryStream zu blockieren, wenn keine Daten verfügbar sind oder gibt es einen anderen Speicher-Stream, den ich verwenden könnte?
Inspiriert von Ihrer Antwort, hier ist meine Multi-Thread, Multi-Write-Version:
%Vor%Bei Ihrer Version sollten Sie den Stream beim Schreiben lesen, ohne dass nacheinander Schreibvorgänge möglich sind. Meine Version puffert alle geschriebenen Puffer in einer ConcurrentQueue (es ist ziemlich einfach, sie in eine einfache Queue zu ändern und zu sperren)
Tags und Links c# stream memorystream