我正在尝试将控制台应用程序的输出转到TextBox。
我正在使用以下代码打开应用程序&获得输出。
Process p = new Process();
p.StartInfo.FileName = "CMD.EXE";
p.StartInfo.Arguments = "/K Console.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
WriteToLog(p.StandardOutput.ReadToEnd());
p.WaitForExit();
这会成功打开Console.exe,但在控制台关闭之前它不会输出到Log TextBox。 (WriteToLog()是我通过这种方式制作的函数。)
我已经尝试删除“p.WaitForExit();”部分,但它不会改变它。
我怎么能这样做?我只想让输出进入日志而不必关闭控制台。
如果你需要知道,这是我的WriteToLog函数:
public void WriteToLog(string value)
{
Log.Text += value;
}
答案 0 :(得分:2)
我这样做并且有效。 你可以尝试一下。
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;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Process p = new Process();
p.StartInfo.FileName = @"C:\loop.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.Start();
p.BeginOutputReadLine();
}
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
label1.Invoke((MethodInvoker)delegate
{
label1.Text = e.Data; // runs on UI thread
});
}
}
}
调整命令行参数以满足您的需要。
答案 1 :(得分:1)
WaitForExit
正如它所说的那样;它阻塞执行线程,直到进程终止。您可能正在寻找OutputDataReceived事件,您可以处理该事件以将输出附加到日志中。或者,在另一个线程上调用WaitForExit
,我不建议这样做。