C# Process运行cmd命令的异步回显
以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子:
以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子:
[csharp] view plain copy
    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 CmdCallbackShow
    {
        // 1.定义委托
        public delegate void DelReadStdOutput(string result);
        public delegate void DelReadErrOutput(string result);  
        public partial class Form1 : Form
        {
            // 2.定义委托事件
            public event DelReadStdOutput ReadStdOutput;
            public event DelReadErrOutput ReadErrOutput;  
            public Form1()
            {
                InitializeComponent();
                Init();
            }  
            private void Init()
            {
                //3.将相应函数注册到委托事件中
                ReadStdOutput += new DelReadStdOutput(ReadStdOutputAction);
                ReadErrOutput += new DelReadErrOutput(ReadErrOutputAction);
            }  
            private void button1_Click(object sender, EventArgs e)
            {
                // 启动进程执行相应命令,此例中以执行ping.exe为例
                RealAction("ping.exe", textBox1.Text);
            }  
            private void RealAction(string StartFileName, string StartFileArg)
            {
                Process CmdProcess = new Process();
                CmdProcess.StartInfo.FileName = StartFileName;      // 命令
                CmdProcess.StartInfo.Arguments = StartFileArg;      // 参数  
                CmdProcess.StartInfo.CreateNoWindow = true;         // 不创建新窗口
                CmdProcess.StartInfo.UseShellExecute = false;
                CmdProcess.StartInfo.RedirectStandardInput = true;  // 重定向输入
                CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出
                CmdProcess.StartInfo.RedirectStandardError = true;  // 重定向错误输出
                //CmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  
                CmdProcess.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
                CmdProcess.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);  
                CmdProcess.EnableRaisingEvents = true;                      // 启用Exited事件
                CmdProcess.Exited += new EventHandler(CmdProcess_Exited);   // 注册进程结束事件  
                CmdProcess.Start();
                CmdProcess.BeginOutputReadLine();
                CmdProcess.BeginErrorReadLine();  
                // 如果打开注释,则以同步方式执行命令,此例子中用Exited事件异步执行。
                // CmdProcess.WaitForExit();
            }  
            private void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
            {
                if (e.Data != null)
                {
                    // 4. 异步调用,需要invoke
                    this.Invoke(ReadStdOutput, new object[] { e.Data });
                }
            }  
            private void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
            {
                if (e.Data != null)
                {
                    this.Invoke(ReadErrOutput, new object[] { e.Data });
                }
            }  
            private void ReadStdOutputAction(string result)
            {
                this.textBoxShowStdRet.AppendText(result + "\r\n");
            }  
            private void ReadErrOutputAction(string result)
            {
                this.textBoxShowErrRet.AppendText(result + "\r\n");
            }  
            private void CmdProcess_Exited(object sender, EventArgs e)
            {
                // 执行结束后触发
            }
        }
    }
C# Process运行cmd命令的异步回显的更多相关文章
- C#隐式运行CMD命令(隐藏命令窗口)
		原文 C#隐式运行CMD命令(隐藏命令窗口) 本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运 ... 
- ASP.NET CORE下运行CMD命令
		ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事 ... 
- C# 运行CMD命令
		/// <summary> /// 运行CMD命令 /// </summary> /// <param name="cmd">命令</pa ... 
- Atitit.运行cmd 命令行 php
		Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1 ... 
- [delphi]运行cmd命令,并取得输出字符
		http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ... 
- Windows学习总结(12)——Windows 10系统开始运行-cmd命令大全
		gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注 ... 
- java运行cmd命令
		java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ... 
- ECStore在Win环境下如何运行CMD命令
		大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的a ... 
- 【Java】Java运行cmd命令直接导出.sql文件
		Java中的Runtime.getRuntime().exec(commandStr)可以调用执行cmd命令 package Util; import java.io.File; import jav ... 
随机推荐
- [linux]scp指令
			实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ... 
- 敏捷个人微信号:AgileMe ,欢迎大家推广和关注
- 使用Eclipse调试PHP程序
			我安装的是PHP Version 5.3.26,按照网上提示在Eclipse中使用XDebug进行调试,不过配置了却使用不了,下面把解决方法简要说一下. XDebug老是加载不了 From PHP 5 ... 
- C#语法糖之 ReflectionSugar 通用反射类
			用法很简单: ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒 ,可以不填默认不缓存 rs.有嘛点嘛 性能测试: 性能测试类源码: ht ... 
- DecimalFormat 中的 # 与 0 的区别(中文帮助文档中翻译可能是错误的)
			想对数字进行格式化的时候,可能会使用到 java.text.DecimalFormat 类.中文帮助文档中,有如下符号 位置 本地化 含义 0 数字 是 阿拉伯数字 # 数字 是 阿拉伯数字,如果不存 ... 
- 解决tomcat was unable to start within问题
			这个问题可能大家都熟悉,以前碰到这个问题,重新启动一次eclipse就好了,随着我的一个项目的增大,我发现这种情况越来越多,到底是怎么回事? 出现这个情况的原因有两个,要么是你的数据库连接connec ... 
- ASP.NET后台执行JS代码
			1. 用Response.Write方法 代码如下:Response.Write("<script type='text/javascript'>alert("XXX& ... 
- 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知
			[源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通 ... 
- ActiveReports 报表应用教程 (9)---交互式报表之动态排序
			在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据 ... 
- AC自动机---病毒侵袭
			HDU 2896 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/B Description 当太 ... 
