网站首页 > 主流语言 > C/C#/C++ 正文
在用C#写一个项目中的工具程序时,需要在C#程序中运行一个命令行的程序,同时将程序的命令行标准输出获取到并显示在指定的文本框中。
查找相关资料找到以下办法,供大家参考。
在创建Process的时候,通过如下方式来实现该功能。
首先,创建ProcessStartInfo:
var p = new Process { StartInfo = new ProcessStartInfo { FileName = "program.exe", Arguments = "command line arguments to your executable", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true } };
然后,用上面创建好的启动信息来启动进程,如下:
p.Start(); while (!p.StandardOutput.EndOfStream) { string line = p.StandardOutput.ReadLine(); // do something with line }
另外,也可以参照以下代码,采用同步或异步方式来运行程序,获取命令行标准输出的内容。
同步方式的代码:
static void runCommand() { Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/c DIR"; // Note the /c command (*) process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.Start(); //* Read the output (or the error) string output = process.StandardOutput.ReadToEnd(); Console.WriteLine(output); string err = process.StandardError.ReadToEnd(); Console.WriteLine(err); process.WaitForExit(); }
异步方式的代码:
static void runCommand() { //* Create your Process Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/c DIR"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; //* Set your output and error (asynchronous) handlers process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler); //* Start process and handlers process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); } static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) { //* Do your stuff with the output (write to console/log/StringBuilder) Console.WriteLine(outLine.Data); }
猜你喜欢
- 2023-11-13 使用C#的Socket实现最简单的TCP通信示例代码
- 2023-11-13 C#如何退出当前进程
- 2023-11-12 C#中通过代码获取当前系统主板BIOS中序列号等信息的方法
- 2023-11-12 C#中获取本机IP地址、HostName 和DNS名称
- 2023-11-12 C#程序中如何获取当前操作系统的名称
- 2023-11-12 C#使用ToString方法数组类型格式化为字符串
- 2023-11-12 C#的网站通过Windows性能计数器监测服务器的性能
- 2023-11-12 C#中如何获取当前系统CPU的核心数
- 2023-11-12 C#中结构体和byte数组之间的转换
- 2023-11-12 C#中异步编程时使用Task.Factory.StartNew和Task.Run的区别
你 发表评论:
欢迎- 12-06如何自定义Excel2003散点图的数据标志
- 12-06excel2007的sheet不见了怎么办
- 12-06Excel2010中进行设置取消密码的操作方法
- 12-06excel怎样使用IMSUM函数
- 12-06EXCEL快速输入数据
- 12-06excel中设置次要坐标轴的教程
- 12-06excel2003冻结窗格的教程
- 12-06Excel如何输入上标下标
- 开源分类
- 最近发表
- 开源网标签
本文暂时没有评论,来添加一个吧(●'◡'●)