C#Process的OutputDataReceived事件不触发问题及解决
作者:time-flies 发布时间:2023-08-12 19:22:41
标签:C#,Process,OutputDataReceived
C#Process OutputDataReceived事件不触发
问题描述
项目需要用cmd调用其它软件,实时获取软件处理结果,并根据获取到的结果决定下一步的输出,代码如下:
Process proCmd = null;
proCmd = new Process();
proCmd.StartInfo.FileName = "cmd.exe"; //cmd
proCmd.StartInfo.UseShellExecute = false; //不显示shell
proCmd.StartInfo.CreateNoWindow = true; //不创建窗口
proCmd.StartInfo.RedirectStandardInput = true; //打开流输入
proCmd.StartInfo.RedirectStandardOutput = true; //打开流输出
proCmd.StartInfo.RedirectStandardError = true; //打开错误流
proCmd.StandardInput.AutoFlush = true; //每次调用 Write()之后,将其缓冲区刷新到基础流
proCmd.OutputDataReceived += UpdateCmd;
proCmd.ErrorDataReceived += UpdateCmd;
proCmd.Start();//执行
proCmd.StandardInput.WriteLine(shell);
但是,Process的OutputDataReceived、ErrorDataReceived两个事件一直没有触发。
解决方法
Process的OutputDataReceived、ErrorDataReceived两个事件只会异步读取操作过程中发生,需调用 Process的BeginErrorReadLine 、BeginOutputReadLine方法启动异步读取操作
执行命令的代码修改如下:
proCmd.Start();//执行
proCmd.BeginOutputReadLine();
proCmd.BeginErrorReadLine();
proCmd.StandardInput.WriteLine(shell);
C#Process的详细用法
process进程类,介绍一下六种使用方法
Process process = new Process();//实例
process.StartInfo.CreateNoWindow = true;//设定不显示窗口
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "cmd.exe"; //设定程序名
process.StartInfo.RedirectStandardInput = true; //重定向标准输入
process.StartInfo.RedirectStandardOutput = true; //重定向标准输出
process.StartInfo.RedirectStandardError = true;//重定向错误输出
process.Start();
process.StandardInput.WriteLine("ipconfig");//执行的命令
process.StandardInput.WriteLine("exit");
process.WaitForExit();
process.Close();
return process.StandardOutput.ReadToEnd();
(1) publicbool Start () //启动360浏览器,并打开某个网站
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "360se.exe"; //启动360浏览器,可以更换
process.StartInfo.Arguments = "http://www.sina.com";
process.Start();
(2) publicstaticProcessStart (ProcessStartInfostartInfo)//打开资源管理器并指向某个路径
System.Diagnostics.ProcessStartInfo processStartInfo = new
System.Diagnostics.ProcessStartInfo();
processStartInfo.FileName = "explorer.exe"; //资源管理器
processStartInfo.Arguments = @"D:\";
System.Diagnostics.Process.Start(processStartInfo);
(3) publicstaticProcessStart (stringfileName)//用默认方式打开某个应用,即直接打开某个exe(两种方法)
System.Diagnostics.Process.Start(@"D:\Program Files\Tencent\QQ\Bin\QQ.exe"); //直接调用打开文件
(4) Process.Start (StringfileName, Stringarguments) //用某种应用打开某个文件
System.Diagnostics.Process.Start("explorer.exe", "D:\\Readme.txt"); //直接打开文件Readme.txt
上面已经举例了用process.start()打开网站的方法,现在讲讲用processs.star()定位到某个文件的方法。
(5) 关闭某个进程
Process[] p = Process.GetProcessesByName(proName); //根据进程命获得指定的进程
p[0].Kill(); //杀死该进程
(6) 获得本机的进程
Process[] proList = Process.GetProcesses(".");//获得本机的进程
int k = proList.Length.ToString(); //当前进程数量
来源:https://blog.csdn.net/FliesOfTime/article/details/102502092


猜你喜欢
- 今天被数据大神说了,对接第三方接口返回的json字段我想用驼峰形式,他说我这样不专业。所以就改了,认怂。记住以后再次对接rest接口,返回的
- package com.anno;import java.lang.annotation.Retention; import j
- C# 自带的HttpWebRequest效率太低,对于自组HTTP封包不好操作。在写超级SQL注入工具时,研究了很长一段时间如何使用Sock
- Android资源文件大致可以分为两种:第一种是res目录下存放的可编译的资源文件:这种资源文件系统会在R.java里面自动生成该资源文件的
- 我object != null要避免很多NullPointerException。有什么替代方法:if (someobject != nul
- 本文介绍了如何使用Spring Security OAuth2构建一个授权服务器来验证用户身份以提供access_token,并使用这个ac
- 因为目前工程无法使用第三方,只能搞一个 * 缓存了 * 缓存分为内存缓存,本地缓存,网络缓存;缓存的步骤依次是网络,内存,本地,然后取的顺序为内
- 实现二分法查找二分法查找,需要数组内是一个有序的序列二分查找比线性查找:数组的元素数越多,效率提高的越明显二分查找的效率表示:O(log2N
- //哈弗曼编码的实现类public class HffmanCoding { private int c
- 前言:在本文中,我们将详细讨论Java中的一个核心概念——线程的生命周期。我们将使用一个快速的图解,
- 介绍众所周知,AOP(面向切面编程)是Spring框架的特色功能之一。通过设置横切关注点(cross cutting concerns),A
- 由C#转入Java一段时间了,总结下个人认为的Java同C#语法之间的不同之处,有不同意见之处还望各位海涵 刚学Java时觉得语法同C#大致
- JetBrainsMono 是 JetBrains 公司开发的一款开源字体,可免费商用。正如其名字带的Mono,即Monospaced Fo
- 简介:Android Studio是Android的官方IDE。它是专为Android而打造,可以加快您的开发速度,帮助您为每款Androi
- flutter中的布局flutter布局机制的核心是组件。在flutter中,几乎所有的东西都是组件,布局模型也不例外。图片,Icon, 文
- Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需
- 1>方法一之前在配置 Maven 的 settings.xml 时,都会设置 mirror 节点,例如:<mirrors>
- 本文参考借鉴:https://www.jb51.net/article/102983.htm先上效果图:自定义控件:AttendancePr
- 最近在做一个资源共享的项目中,采用了Struts2.1.8+Spr
- 本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下随机生成0~100的数字,通过控制台输入猜测数字,输出进行提示