传统方式:
using (Process process= new System.Diagnostics.Process())
{
process.StartInfo.FileName= "ping";
process.StartInfo.Arguments= "www.ymind.net";
// 必须禁用操作系统外壳程序process.StartInfo.UseShellExecute= false;
process.StartInfo.CreateNoWindow= true;
process.StartInfo.RedirectStandardOutput= true; process.Start();
string output= process.StandardOutput.ReadToEnd();
if (String.IsNullOrEmpty(output)== false)this.textBox1.AppendText(output+ "\r\n");
process.WaitForExit(); process.Close();
}
异步方式:
private void button3_Click(object
sender, EventArgs e)
{
using (Process process = new
System.Diagnostics.Process())
{
process.StartInfo.FileName = "ping"
;
process.StartInfo.Arguments = "www.ymind.net -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)
{
//
这里仅做输出的示例,实际上您可以根据情况取消获取命令行的内容
// 参考:process.CancelOutputRead()
if (String.IsNullOrEmpty(e.Data) == false
)
this.AppendText(e.Data + "\r\n"
);
}
#region 解决多线程下控件访问的问题
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);
}
}
#endregion