Gibt es einen In-Memory-Stream, der wie ein Dateistream blockiert?

8

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?

    
sipwiz 25.09.2009, 06:33
quelle

2 Antworten

7

Am Ende habe ich einen einfachen Weg gefunden, dies zu tun, indem ich von MemoryStream erbte und die Read- und Write-Methoden übernahm.

%Vor%     
sipwiz 28.09.2009, 00:52
quelle
8

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)

    
Jamby 02.10.2013 12:54
quelle

Tags und Links