时间:2021-05-19
本文以一个简单的小例子讲解如何将命令行信息实时的输出到文本框中。仅供学习分享使用,如有不足之处,还请指正。
概述
在C#程序开发过程中,有时需要运行其它的程序并获得输出的结果来进行进一步的处理。一般第三方的程序,主要通过进程来调用,如果能够获取第三方程序执行过程中的信息,就显得方便而有用。
涉及知识点:
效果图
如下【如果命令执行完毕,会自动结束,如果中断进程,可以手动点击结束进程】:
核心代码
主要代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoBat{ public partial class MainForm : Form { private BatStatus curBatSataus = BatStatus.NONE; private Process curProcess = new Process(); public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { InitInfo(); } private void InitInfo() { curProcess.OutputDataReceived -= new DataReceivedEventHandler(ProcessOutDataReceived); ProcessStartInfo p = new ProcessStartInfo(); p.FileName = "cmd.exe"; //p.Arguments = " -t 192.168.1.103"; p.UseShellExecute = false; p.WindowStyle = ProcessWindowStyle.Hidden; p.CreateNoWindow = true; p.RedirectStandardError = true; p.RedirectStandardInput = true; p.RedirectStandardOutput = true; curProcess.StartInfo = p; curProcess.Start(); curProcess.BeginOutputReadLine(); curProcess.OutputDataReceived += new DataReceivedEventHandler(ProcessOutDataReceived); } /// <summary> /// 开始命令行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStart_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.txtCommand.Text.Trim())) { MessageBox.Show("请输入命令"); } if (curBatSataus != BatStatus.ON) { curProcess.StandardInput.WriteLine(this.txtCommand.Text.Trim()); curBatSataus = BatStatus.ON; } else { MessageBox.Show("当前进程正在运行,请先关闭"); } } /// <summary> /// 结束命令行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStop_Click(object sender, EventArgs e) { if (curBatSataus == BatStatus.ON) { curProcess.CancelOutputRead();//取消异步操作 curProcess.Kill(); curBatSataus = BatStatus.OFF; //如果需要手动关闭,则关闭后再进行初始化 InitInfo(); } } /// <summary> /// 进程接受事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void ProcessOutDataReceived(object sender, DataReceivedEventArgs e) { if (this.txtOutPutInfo.InvokeRequired) { this.txtOutPutInfo.Invoke(new Action(() => { this.txtOutPutInfo.AppendText(e.Data + "\r\n"); })); } else { this.txtOutPutInfo.AppendText(e.Data + "\r\n"); } } private void timer1_Tick(object sender, EventArgs e) { if ((string.IsNullOrEmpty(this.curProcess.StartInfo.FileName) || this.curProcess.StandardInput.BaseStream.CanWrite) && curBatSataus != BatStatus.OFF) { curBatSataus = BatStatus.OFF; } } } /// <summary> /// 命令状态 /// </summary> public enum BatStatus { NONE = 0, ON = 1, OFF = 2 }}备注:
关于如何在命令行执行过程中【如:Ping 192.168.1.100 -t】,键入快捷键【如:Ctrl+C】等操作,目前还没有实现。目前采用的就强制关闭进程方法
源码下载
以上就是C# 动态输出Dos命令执行结果的实例(附源码)的详细内容,更多关于C# 动态输出Dos命令执行结果的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#动态执行批处理命令的方法。分享给大家供大家参考。具体方法如下:C#动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数。
本文实现了C#隐式运行CMD命令的功能。下图是实例程序的主画面。在命令文本框输入DOS命令,点击“Run”按钮,在下面的文本框中输出运行结果。下面是程序的完整代
本文实例讲述了C#执行DOS命令的方法。分享给大家供大家参考。具体实现方法如下:在c#程序中,有时会用到调用cmd命令完成一些功能,本文介绍的如下方法,可实现c
本文实例讲述了C#实现的调用DOS命令操作类。分享给大家供大家参考。具体如下:/************************************AllR
本文实例讲述了C#实现在控制台输出当前系统时间的方法。分享给大家供大家参考。具体实现方法如下://C#实现的小控制台程序:动态输出当前时间usingSystem