2017-03-22 2 views
1

Szenario Folgende:Detect Console.ReadLine()

ich eine Konsole-Anwendung mit folgenden Code haben:

static void Main(string[] args) 
{ 
     // Some code. 
     Console.WriteLine("Done"); 
     Console.ReadLine(); 
} 

Die Anwendung erfolgreich gebaut und "Test.exe" erzeugt wird.

Jetzt habe ich eine andere Konsolenanwendung, die die generierte exe ausführt.

static void Main(string[] args) 
     { 
      var processStartInfo = new ProcessStartInfo("Test.exe") 
      { 
       UseShellExecute = false, 
       RedirectStandardOutput = true 
      }; 

     // Setup the process 
     process = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true }; 

     process.OutputDataReceived += ProcessOnOutputDataReceived; 
     process.Start(); 
     process.BeginOutputReadLine(); 
     // Detect here if application is completed. 
     } 

     Console.ReadLine(); 
    } 

    private static void ProcessOnOutputDataReceived(object sender, DataReceivedEventArgs dataReceivedEventArgs) 
    { 
     Console.WriteLine(dataReceivedEventArgs.Data); 
    } 

Wenn ich den obigen Code auszuführen, ruft die „Test.exe“ und die Ausgabe von „Test.exe“ wird in dem Konsolenfenster des aktuellen Prozesses angezeigt.

"Test.exe" wartet auf Eingabe bei "Console.ReadLine()" und der aktuelle Prozess wartet auf "Test.exe" zu beenden.

Kann festgestellt werden, ob "Test.exe" auf eine Eingabe im aktuellen Prozess wartet?

+0

Duplikat von http://Stackoverflow.com/q/40421394/1132334, aber das wurde auch nicht beantwortet – dlatikay

+0

Sie könnten einfach nach der Fertigmeldung suchen, ja? – itsme86

+1

http://StackOverflow.com/a/14510536/1132334: in diesem Zusammenhang 'ThreadWaitReason' zu untersuchen kann einen Versuch wert sein – dlatikay

Antwort

0

Gibt es eine Möglichkeit, OutputReadLine() synchron aufzurufen? Wenn ja, wird Ihre Anwendung so lange blockieren, bis test.exe beendet ist und erst dann wird Ihre nächste Codezeile ausgeführt. es würde nicht nötig sein zu überprüfen.