2012-02-07 10 views
1

現在、STDErrorとSTDOutputの両方のリダイレクトに問題があります。私がしたいのは、エラーがスローされないと、通常の出力とともにリッチテキストボックスに印刷するエラーがある場合です。STDエラーとSTDOutのリダイレクト

私が午前問題は、私はSDTエラーをリダイレクトするために行を追加した場合ということです:

string error = process1.StandardError.ReadToEnd(); 
rchsdtOut.Text = error; 

その後、私の通常のSTDアウトは、テキストFILDにリダイレクトされませんが、そのエラーが発生した場合印刷されます。

process1 = new System.Diagnostics.Process(); 
process1.StartInfo.UseShellExecute = false; 
process1.StartInfo.RedirectStandardOutput = true; 
process1.StartInfo.RedirectStandardError = true; 
process1.StartInfo.CreateNoWindow = true; 
process1.StartInfo.FileName = "java.exe "; 

//String abc = txtSingleBar.Text.Replace("\\", "/"); 
toLoad = lstBarToLoad.Items[i].Text; 

process1.StartInfo.Arguments = "-Xmx512M -jar"; 
process1.StartInfo.Arguments += toLoad; 

Console.WriteLine(process1.StartInfo.Arguments); 
try 
    { 
    process1.Start();  
    process1.OutputDataReceived += (s, a) => myMethod(a); 
    process1.BeginOutputReadLine(); 

    string error = process1.StandardError.ReadToEnd(); 
    rchsdtOut.Text = error; 
} 

テキストにイベントを書き込むための方法はBascally私が欲しいもの

private void myMethod(DataReceivedEventArgs e) 
{ 
    if (e.Data != null) 
    { 
     Action action =() => rchsdtOut.Text += "\r\n" + e.Data.ToString(); 
     rchsdtOut.BeginInvoke(action, null); 
     Console.WriteLine(e.Data.ToString()); 
    } 

}//end of private 

をFILD 1が発生した場合、両方をリダイレクトするSDTOutとSDTErrorです。

アイデア?

process1.OutputDataReceived += (s, a) => myMethod(a); 
process1.BeginOutputReadLine(); 

をして、これを追加します:

+0

投稿されたコードに構文エラーがあるようです。コンパイルできるコードを投稿してください。 – Oded

+0

あなたは何を意味するのかよく分かりません。それは私のために準拠しています。 – user1158745

答えて

2

なぜだけではなく、これを取る(myErrorMethodを追加することを忘れないでください!)

process1.ErrorDataReceived += (s, a) => myErrorMethod(a); 
process1.BeginErrorReadLine(); 

は次に、この取り出し:

string error = process1.StandardError.ReadToEnd(); 

を代わりに、これを実行してください(終了するのを待つ場合)

process1.WaitForExit(); 

基本的には、同期および非同期出力が読み混在させることはできません。 Begin_______ReadLine()を使用するか、ストリームオブジェクトを読み取る必要がありますが、両方を読み取ることはできません。

+0

ガー。良いアイデア。私は、ErrorDataReceivedメソッドがあることを認識しませんでした。ありがとうございました。 – user1158745

関連する問題