2013-05-09 53 views
2

我有一個應用程序啓動並讀取控制檯進程的標準輸出。在該控制檯進程中,我調用了一些寫入控制檯的DLL文件..但我不想捕獲這些消息,我只想捕獲它們發送的輸出字符串。如何從控制檯進程只捕獲一行?

我試圖做:

verboseMethod(); //method writting things into the console 

output = dllMethod(); //method returning what I want 

Console.Clear(); 
Console.Out.Write(output) 

我這樣做,所以我相信我讀的一切之前Console.Clear()執行:

exeProcess.BeginOutputReadLine(); 
       string errString = exeProcess.StandardError.ReadToEnd(); 

你能給我這個選擇嗎?等到最後輸出消息給出或類似的東西?

編輯

我相信這樣的事情會幫助(如果存在的話)。我可以告訴控制檯不輸出重定向或不以某一點寫什麼,然後允許它來寫再次在代碼中的其他地方?像:

Console.CloseBuffer(); 

Console.OpenBuffer(); 
+0

你可以做的是將輸出重定向到一個流,然後停止閱讀從流(「捕獲」),一旦你有你需要的東西。 – redtuna 2013-05-09 21:00:26

回答

0

你應該嘗試使用輸出重定向臺異步,以及打開和關閉「EnableRaisingEvents」,所以你只想要執行之間捕捉。使用BeginOutputReadLine()和CancelOutputRead()來啓動/停止控制檯讀取。

 var myOutput = new StringBuilder(); 
     var myProcess = new Process(); 
     myProcess.StartInfo = new ProcessStartInfo(path, command); 
     myProcess.StartInfo.UseShellExecute = false; 
     myProcess.StartInfo.RedirectStandardOutput = true; 
     myProcess.StartInfo.RedirectStandardError = true; 
     myProcess.EnableRaisingEvents = true; 

     myProcess.OutputDataReceived += (object sendingProcess, DataReceivedEventArgs e) => 
     { 
      if (e.Data != null) 
      { 
       myOutput.AppendLine(e.Data); 
      } 
     }; 

     myProcess.ErrorDataReceived += (object sendingProcess, DataReceivedEventArgs e) => 
     { 
      if (e.Data != null) 
      { 
       myOutput.AppendLine(e.Data); 
      } 
     }; 
     myProcess.Start(); 

     verboseMethod(); 

     //Start Capture here! 
     myProcess.BeginErrorReadLine(); 
     myProcess.BeginOutputReadLine(); 

     dllMethod(); 
相關問題