重定向STD错误&;STDOut

本文关键字:STDOut amp STD 错误 重定向 | 更新日期: 2023-09-27 18:23:46

我目前在重定向STDError和STDEOutput时遇到问题。我想做的是,当出现错误时,如果没有抛出错误,则会将其与正常输出一起打印到富文本框中。

我遇到的问题是,如果我添加重定向SDT错误的行:

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

然后,我正常的STD输出不会重定向到文本过滤器,但如果打印出错误。

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;
 }

将事件写入文本过滤的方法

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

基本上,我希望两者都被重定向,SDTOut和SDTError(如果应该发生的话)。

有什么想法吗?

重定向STD错误&;STDOut

为什么不直接接受这个:

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

并添加此:(不要忘记添加myErrorMethod!)

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

然后取出这个:

string error = process1.StandardError.ReadToEnd();

相反,这样做(如果你想等待它结束):

process1.WaitForExit();

基本上,您不能混合同步和异步输出读取。您必须使用Begin_______ReadLine()或读取流对象,但不能同时使用两者。