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.
Als Erstes verwenden Sie die Process.StandardInput
-Eigenschaft direkt als Ziel, wie
Ansonsten liefert der msdn-Eintrag eine klare Anleitung mit Process.BeginOutputReadLine()
, das Sie zu
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
und
%Vor%um Fehlerfälle zu behandeln (was auch immer das bedeuten mag).