我试图从应用程序调用批处理文件,但我希望隐藏命令窗口,并将标准输出重定向到一个或多个位置(因为它是由批处理文件生成的)。
我的问题是,当批处理文件正在运行时,控制台启动,没有显示任何内容;它只是启动。任务完成后,控制台将关闭。我想摆脱控制台(也许让它在后台运行)。
另一个问题是,我将输出重定向到富文本框。如果我将其重定向到控制台或文本框,它只会一次输出所有结果。我希望它在发生的时候逐行吐出。讲得通?
代码如下:
//Declare and instantiate a new process component.
System.Diagnostics.Process process1;
process1 = new System.Diagnostics.Process();
process1.StartInfo.UseShellExecute = false;
process1.StartInfo.RedirectStandardOutput = true;
process1.StartInfo.FileName = "cmd.exe";
process1.StartInfo.Arguments = "<BATCHfILE>";
process1.Start();
string output = process1.StandardOutput.ReadToEnd();
rchsdtOut.Text = output;
Console.WriteLine(process1.StandardOutput.ReadToEnd());
process1.WaitForExit();
process1.Close();发布于 2012-01-19 23:03:11
这就是我会怎么做的。希望我正确理解了你的问题:
添加:
process1.CreateNoWindow = true,
process1.OutputDataReceived += (s, e) => myMethod(e);
process1.BeginOutputReadLine(); 然后是一种方法
private void myMethod(DataReceivedEventArgs e)
{
//Do something with e.Data
}解决评论中提到的跨线程操作问题。您需要将此代码添加到您的窗体类中(在函数开始之前):
private delegate void updateText(string str);然后,您需要添加以下内容:
private void update_richTextBox1(string value)
{
richTextBox1.Text += value;
}然后在myMethod函数中添加:
richTextBox1.Invoke(new updateText(update_richTextBox1), new object[] { e.Data.ToString() });https://stackoverflow.com/questions/8928183
复制相似问题