CAD工具之家's Archivers

From boitboy on 2017-03-23 13:50:07

C#获取命令行输出内容的方法

转载:http://www.cnblogs.com/ymind/archive/2012/03/23/2415038.html 很多时候我们需要以编程的方式获取命令行输出的内容,研究了不少时间,终于搞定了。 获取命令行输出内容的方式有传统和异步两种方式。 传统方式: 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 但是在异步方式下也有一个麻烦就是等待程序结束无法调用 process.WaitForExit(); 因为调用这个会导致堵塞 命令行输出不是一行行出来的,而是一下子出来的。 解决办法就是不调用process.WaitForExit(); 而自己去控制 while (!process.HasExited) { System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(20); }

查看完整版本: C#获取命令行输出内容的方法

Tags: WaitForExit, 命令行输出, 异步


©CAD工具之家
创办于:2013年5月24日