Deadlock beim Schreiben in Process.StandardInput

9

Ich schreibe eine Anwendung und ich habe ein Problem mit einem Deadlock.

Mein Code ist so:

%Vor%

Dann muss ich eine .xml-Datei an diesen Prozess senden, damit ich

benutze %Vor%

Eigentlich kann ich einen Teil meiner .xml-Datei an meinen Prozess senden, aber in einem Moment werde ich einen Deadlock bekommen. Ich weiß nicht, wie man richtig BeginOutputReadLine() verwendet, denke ich.

    
Steeven Brunner 15.10.2014, 14:13
quelle

1 Antwort

1

Als Erstes verwenden Sie die Process.StandardInput -Eigenschaft direkt als Ziel, wie

%Vor%

Ansonsten liefert der msdn-Eintrag eine klare Anleitung mit Process.BeginOutputReadLine() , das Sie zu

umgestalten können %Vor%

Wie auch immer - ich weiß, das sollte ein Kommentar sein - gibt es einen bestimmten Grund, warum Sie darauf warten, dass Ihr Prozess etwas schreibt?

  

Der StandardOutput-Stream kann synchron oder asynchron gelesen werden.   Methoden wie Read, ReadLine und ReadToEnd führen synchrones Lesen durch   Operationen auf dem Ausgabestrom des Prozesses. Diese synchronen Lesevorgänge   Operationen werden erst abgeschlossen, wenn der zugehörige Prozess in den zugehörigen Prozess schreibt   StandardOutput-Stream oder schließt den Stream. Im Gegensatz,   BeginOutputReadLine startet asynchrone Leseoperationen auf dem   StandardOutput-Stream. Diese Methode aktiviert einen designierten Event-Handler   für die Stream-Ausgabe und kehrt sofort zum Aufrufer, der kann   andere Arbeiten ausführen, während die Stream-Ausgabe an das Ereignis gerichtet ist   Handler.

Was bedeutet, dass, wenn Ihr Prozess nichts schreibt (und Sie warten), Sie sich endlos um eine Antwort drehen ...

BEARBEITEN

Sie sollten außerdem Process.ErrorDataReceived einen Handler hinzufügen

%Vor%

und

%Vor%

um Fehlerfälle zu behandeln (was auch immer das bedeuten mag).

    
Andreas Niedermair 15.10.2014, 14:45
quelle

Tags und Links