Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重定向STD错误&;STDOut_C#_Redirectstandardoutput - Fatal编程技术网

C# 重定向STD错误&;STDOut

C# 重定向STD错误&;STDOut,c#,redirectstandardoutput,C#,Redirectstandardoutput,我目前在重定向STDError和STDOutput时遇到问题。我想做的是,如果没有抛出错误,则将错误与正常输出一起打印到富文本框中 我遇到的问题是,如果我添加行以重定向SDT错误: string error = process1.StandardError.ReadToEnd(); rchsdtOut.Text = error; 然后,我的正常STD Out不会重定向到文本fild,但如果打印出错误 process1 = new System.Diagnostics.Process(); pr

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

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

string error = process1.StandardError.ReadToEnd();
rchsdtOut.Text = error;
然后,我的正常STD Out不会重定向到文本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;
 }
方法将事件写入文本文件

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和SDTRORM(如果发生)


有什么想法吗?

为什么不干脆拿这个:

process1.OutputDataReceived += (s, a) => myMethod(a);
process1.BeginOutputReadLine();
并添加以下内容:(不要忘记添加
myErrorMethod
!)

然后拿出这个:

string error = process1.StandardError.ReadToEnd();
相反,这样做(如果您想等待它结束):



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

您发布的代码似乎有语法错误。请发布可以编译的代码。不知道你的意思。它符合我的要求。好主意。我不知道有一个ErrorDataReceived方法。谢天谢地。
string error = process1.StandardError.ReadToEnd();
process1.WaitForExit();