博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Process运行cmd命令的异步回显
阅读量:5821 次
发布时间:2019-06-18

本文共 2513 字,大约阅读时间需要 8 分钟。

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

 

 

 

 

 

 

 

 

 

 

 

 

 

[csharp]
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Linq;  
    7. using System.Text;  
    8. using System.Windows.Forms;  
    9. using System.Diagnostics;  
    10.   
    11. namespace CmdCallbackShow  
    12. {  
    13.     // 1.定义委托  
    14.     public delegate void DelReadStdOutput(string result);  
    15.     public delegate void DelReadErrOutput(string result);  
    16.   
    17.     public partial class Form1 : Form  
    18.     {  
    19.         // 2.定义委托事件  
    20.         public event DelReadStdOutput ReadStdOutput;  
    21.         public event DelReadErrOutput ReadErrOutput;  
    22.   
    23.         public Form1()  
    24.         {  
    25.             InitializeComponent();  
    26.             Init();  
    27.         }  
    28.   
    29.         private void Init()  
    30.         {  
    31.             //3.将相应函数注册到委托事件中  
    32.             ReadStdOutput += new DelReadStdOutput(ReadStdOutputAction);  
    33.             ReadErrOutput += new DelReadErrOutput(ReadErrOutputAction);  
    34.         }  
    35.   
    36.         private void button1_Click(object sender, EventArgs e)  
    37.         {  
    38.             // 启动进程执行相应命令,此例中以执行ping.exe为例  
    39.             RealAction("ping.exe", textBox1.Text);  
    40.         }  
    41.           
    42.         private void RealAction(string StartFileName, string StartFileArg)  
    43.         {  
    44.             Process CmdProcess = new Process();  
    45.             CmdProcess.StartInfo.FileName = StartFileName;      // 命令  
    46.             CmdProcess.StartInfo.Arguments = StartFileArg;      // 参数  
    47.   
    48.             CmdProcess.StartInfo.CreateNoWindow = true;         // 不创建新窗口  
    49.             CmdProcess.StartInfo.UseShellExecute = false;  
    50.             CmdProcess.StartInfo.RedirectStandardInput = true;  // 重定向输入  
    51.             CmdProcess.StartInfo.RedirectStandardOutput = true// 重定向标准输出  
    52.             CmdProcess.StartInfo.RedirectStandardError = true;  // 重定向错误输出  
    53.             //CmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  
    54.   
    55.             CmdProcess.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);  
    56.             CmdProcess.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);  
    57.   
    58.             CmdProcess.EnableRaisingEvents = true;                      // 启用Exited事件  
    59.             CmdProcess.Exited += new EventHandler(CmdProcess_Exited);   // 注册进程结束事件  
    60.   
    61.             CmdProcess.Start();  
    62.             CmdProcess.BeginOutputReadLine();  
    63.             CmdProcess.BeginErrorReadLine();  
    64.   
    65.             // 如果打开注释,则以同步方式执行命令,此例子中用Exited事件异步执行。  
    66.             // CmdProcess.WaitForExit();       
    67.         }  
    68.   
    69.         private void p_OutputDataReceived(object sender, DataReceivedEventArgs e)  
    70.         {  
    71.             if (e.Data != null)  
    72.             {  
    73.                 // 4. 异步调用,需要invoke  
    74.                 this.Invoke(ReadStdOutput, new object[] { e.Data });  
    75.             }  
    76.         }  
    77.   
    78.         private void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)  
    79.         {  
    80.             if (e.Data != null)  
    81.             {  
    82.                 this.Invoke(ReadErrOutput, new object[] { e.Data });  
    83.             }  
    84.         }  
    85.   
    86.         private void ReadStdOutputAction(string result)  
    87.         {  
    88.             this.textBoxShowStdRet.AppendText(result + "\r\n");  
    89.         }  
    90.   
    91.         private void ReadErrOutputAction(string result)  
    92.         {  
    93.             this.textBoxShowErrRet.AppendText(result + "\r\n");  
    94.         }  
    95.   
    96.         private void CmdProcess_Exited(object sender, EventArgs e)  
    97.         {  
    98.             // 执行结束后触发  
    99.         }  
    100.     }  

转载地址:http://wlfdx.baihongyu.com/

你可能感兴趣的文章
Python程序在Windows终端乱码解决方法
查看>>
POJ 2236 A - Wireless Network[kuangbin带你飞]专题五 并查集
查看>>
eclipse设置maven加载国内镜像
查看>>
如何在git commit时添加eslint校验
查看>>
Taro,作为React开发者,使用感受
查看>>
面试小抄 - react
查看>>
二. js语法结构
查看>>
Go Web轻量级框架Gin学习系列:数据绑定
查看>>
Dubbo 一些你不一定知道但是很好用的功能
查看>>
k8s拾遗 - ConfigMap
查看>>
好程序员精讲 java设计模式—享元模式
查看>>
iOS-第一次安装cocoapods很慢或出错怎么办?Unable to add a source with url https://github.com......
查看>>
javascript全栈开发实践-web-5
查看>>
小程序自定义tabbar
查看>>
小程序封装工具-showModal
查看>>
使用组合的设计模式 —— 追女孩要用的远程代理模式
查看>>
自定义九宫格解锁控件
查看>>
ES5-String-match/search/replace/split
查看>>
18届校招高薪榜单流出,第一年薪56万!哪个岗位这么多金?
查看>>
调用后端的下载表格接口
查看>>