.NET Framework Bug



  • Ich hoffe, dass ich mit dem Titel, ein paar Fachleute in den Thread einladen konnte.

    Hintergrund:

    Ich starte ein "new Process", hänge mich mit einem Stream(Writer/Reader) an dessen Input- & Outputstream und beschreibe bzw. lese diesen ein.

    Problem:

    Ich will wissen ob im Outputstream etwas drin steht... aber wie?
    Die Peek() Implementation ist wohl eines der komischsten Implementierungen im .NET Framework die ich je gesehen habe. Die Methode blockt bis ein Zeichen drin ist. Ich war von anderen Sprachen sowas wie: "Schau mal schnell nach ob was drin steht, wenn nicht dann gib mir -1 zurück".

    Was soll ich nun machen? 😞
    Einen Workaround habe ich mir schon ausgedacht, aber der ist einfach doof: Thread starten und Peek aufrufen. Ist der Thread nach n Sekunden nicht da, dann steht nichts drin. 🙄

    Was mich davon abhaltet den Workaround zu implementieren? Mein Darm. Denn wenn ich das tue, dann ... :p

    Ich brauche Hilfe, weiß wer eine schönere Lösung?

    Danke



  • Wo ist da jetzt der Bug?



  • Das ist kein Bug sondern genau das dokumentierte Verhalten. Mir scheint du hast das Konzept von Peek() etwas missverstanden. Das hat nichts mit blocken vs. nicht blocken zu tun, sondern damit ob das gelesene Zeichen im Stream bleibt oder nicht.
    Was dein Problem angeht: Schau mal hier.



  • Danke dot. Das hilft mir!

    dot schrieb:

    Das ist kein Bug sondern genau das dokumentierte Verhalten.

    Sehe ich nicht so.

    An integer representing the next character to be read, or -1 if there are no characters to be read

    oder

    http://connect.microsoft.com/VisualStudio/feedback/details/96484/streamreader-peek-can-block



  • Keine Zeichen mehr zu lesen bedeutet, dass der Stream bei EOF angekommen ist. Peek() sollte dann -1 liefern. Der Output Stream von einem Prozess kann aber frühestens dann bei EOF ankommen, wenn der Prozess beendet. Daher ist blocken eigentlich das einzig logische was Peek() in deinem Fall tun könnte, wenn du mich fragst. Alles andre wär imo ein Bug 😉 Wundert mich doch sehr, dass die den Bugreport noch nicht als "By Design" geclosed haben.



  • Eine DataAvailable()-Methode wäre auf jedenfall mal schön. In die Peek()-Falle bin ich da auch schon getappt 😉

    Edit: Noch besser wäre ein .Read() dem ich optional nen Timeout mitgeben kann 😉



  • Versuche einfach so zu proggen das du überhaupt kein Peek brauchst.


Anmelden zum Antworten