zoukankan      html  css  js  c++  java
  • 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 + "
    ");  
                }  
          
                private void ReadErrOutputAction(string result)  
                {  
                    this.textBoxShowErrRet.AppendText(result + "
    ");  
                }  
          
                private void CmdProcess_Exited(object sender, EventArgs e)  
                {  
                    // 执行结束后触发  
                }  
            }  
        }  
    
  • 相关阅读:
    【LOJ #3058】「HNOI2019」白兔之舞(单位根反演+矩阵快速幂+MTT)
    【LOJ #2289】「THUWC 2017」在美妙的数学王国中畅游(LCT+泰勒展开)
    【LOJ #3193】「ROI 2019 Day2」机器人高尔夫球赛(DP+Map)
    【Codeforces 1119H】Triple(FWT)
    PKUWC2020 (旅)游记
    多项式算法合集
    redis入门学习
    servelt
    spring容器原理学习
    Spring MVC
  • 原文地址:https://www.cnblogs.com/tdskee/p/5853505.html
Copyright © 2011-2022 走看看