2013-07-16 57 views
0

我試圖創建一個minecraft服務器包裝,但即時通訊讀取過程的輸出有困難。我想讀取serverProcess_ErrorDataRecevied事件中的輸出,我知道現在有什麼不起作用。但是我可以放什麼來閱讀它?如何從過程輸出讀取

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.IO; 

namespace MC_Server_UI 
{ 
    public partial class Form1 : Form 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo("C:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe", "Xmx1024M - jar " + "craftbukkit.jar" + " nogui"); 
     Process serverProcess; 

     OpenFileDialog ofd; 
     FolderBrowserDialog fbd; 

     public Form1() 
     { 
      InitializeComponent(); 

      fbd = new FolderBrowserDialog(); 
      fbd.ShowDialog(); 

      startInfo.WorkingDirectory = fbd.SelectedPath; 
      startInfo.RedirectStandardInput = startInfo.RedirectStandardError = true; 
      startInfo.UseShellExecute = false; 
      startInfo.CreateNoWindow = true; 

      serverProcess = new Process(); 
      serverProcess.StartInfo = startInfo; 
      serverProcess.EnableRaisingEvents = true; 
      serverProcess.ErrorDataReceived += new DataReceivedEventHandler(serverProcess_ErrorDataReceived); 
      serverProcess.Exited += new EventHandler(serverProcess_Exited); 
      serverProcess.Start(); 
     } 

     private void serverProcess_ErrorDataReceived(object sender, EventArgs e) 
     { 
      richTextBox1.AppendText(serverProcess.StandardError.ReadToEnd()); 
     } 

     private void serverProcess_Exited(object sender, EventArgs e) 
     { 

     } 
    } 
} 

回答

0

參見:

代碼:

serverProcess.StartInfo.RedirectStandardOutput = true; 
serverProcess.OutputDataReceived += (sender, args) => Console.WriteLine("received output: {0}", args.Data); 
serverProcess.Start(); 
serverProcess.BeginOutputReadLine(); 

或者:

serverProcess.StartInfo.RedirectStandardOutput = true; 
var output = serverProcess.StandardOutput.ReadToEnd(); 

參見:ProcessStartInfo.RedirectStandardError

serverProcess.StartInfo.RedirectStandardError = true; 
var error = serverProcess.StandardError.ReadToEnd(); 
+0

我沒有看到如何回答我的問題。我重定向了流並使用.ReadToEnd不起作用。 – user2587567

+0

「StandardError」和「StandardOutput」是一個「StreamReader」。您可以使用它從流程中提取輸出。 'OutputDataReceived'是一個也可以工作的事件。 – Romoku

+0

經過一些測試後,我注意到事件只會觸發,如果我已經完成.BeginErrorReadLine但使用.ReadToEnd然後將引發異常。 – user2587567