转 C# Process运行cmd命令的异步回显

以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子:

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)
    {
        // 执行结束后触发
    }
}  

}

原文地址:https://www.cnblogs.com/ssboy/p/9158883.html

时间: 2024-08-30 01:12:30

转 C# Process运行cmd命令的异步回显的相关文章

Atitit.运行cmd 命令行 php

Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1.4. 回显乱码 2 2. exec,system等函数调用系统命令 2 3. php.ini.关掉安全模式safe_mode = off 3 4. 參考 3 1. 运行cmd 命令行,调用系统命令的基础 1.1. 实际运行模式 Processmonitor 检查.得到.. PID: 115372,

PowerShell运行cmd命令

1.使用.exe扩展名 2.使用 cmd /c "" 3.在 PowerShell v3 中有另一种选择来解决这个问题,只需在命令行的任意位置添加 –% 序列(两个短划线和一个百分号)PowerShell 就不会再去解析剩下的部分 From:http://www.pstips.net/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters.html PowerShell运行

ECStore在Win环境下如何运行CMD命令

大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的app(create app)等.但用iis+php+mysql+ZendLoader布署的开发环境,或者使用类似于WAMP.LNMP.LAMP之类的集成包布署的环 境,默认并不支持cmd.bat命令的执行. 要让windows开发环境下能使用ECStore的cmd命令,必须配置windows的环境变

C#中隐式运行CMD命令行窗口的方法

using System; using System.Diagnostics; namespace Business { /// <summary> /// Command 的摘要说明. /// </summary> public class Command { private Process proc = null; /// <summary> /// 构造方法 /// </summary> public Command() { proc = new Pr

【批处理命令】echo回显命令

echo echo                                   当前状态,是开启还是关闭 echo   [on/off]                     打开或关闭echo echo   [message]                回显message内容 [@]echo                              本条命令是否回显 echo  [message]>文件        将message写到文件中,清空写入 echo  [messa

命令执行无回显

原文地址:https://www.cnblogs.com/ahacker15/p/12510019.html

C#隐式运CMD命令

本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运行结果. 下面是程序的完整代码.本程序没有使用p.StandardOutput.ReadtoEnd()和p.StandardOutput.ReadLine()方法来获得输出,因为这些方法执行后画面容易卡死.而是通过调用异步方法BeginOutputReadLine来获取输出,并在事件p.OutputDataReceived的事件处理方法中来处理结果. u

Js使用WScript.Shell对象执行.bat文件和cmd命令

http://www.jb51.net/article/58669.htm WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件.shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用的操作,比如运行程序.读写注册表.环境变量等.这个对象通常被用在VB或VBS编程中. 安装WScript.Shell对象:

Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

Javascript中使用WScript.Shell对象执行.bat文件和cmd命令 http://www.cnblogs.com/ZHF/p/3328439.html WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件.shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用的操作,比如运行程序.读写注