异步获取CMD命令行输出内容
当控制台命令使用process.Start(); 后可以直接显示输出内容,当然它是异步显示的不用等程序结束。代码如下:
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 testApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (Process process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = "ping";
process.StartInfo.Arguments = "127.0.0.1 -t";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.BeginOutputReadLine();
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
}
}
private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
this.AppendText(e.Data + Environment.NewLine);
}
public delegate void AppendTextCallback(string text);
public void AppendText(string text)
{
if (this.textBox1.InvokeRequired)
{
AppendTextCallback d = new AppendTextCallback(AppendText);
this.textBox1.Invoke(d, text);
}
else
{
this.textBox1.AppendText(text);
}
}
}
}
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 testApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (Process process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = "ping";
process.StartInfo.Arguments = "127.0.0.1 -t";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.BeginOutputReadLine();
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
}
}
private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
this.AppendText(e.Data + Environment.NewLine);
}
public delegate void AppendTextCallback(string text);
public void AppendText(string text)
{
if (this.textBox1.InvokeRequired)
{
AppendTextCallback d = new AppendTextCallback(AppendText);
this.textBox1.Invoke(d, text);
}
else
{
this.textBox1.AppendText(text);
}
}
}
}
程序是一个ping -t的示例: