写了一个小程序启动CMD输入命令行,监控实时输出,然后在界面上显示输出内容;问题来了,程序在判断StreamReader.EndOfStream时,由于CMD输出有延时,程序执行到StreamReader.EndOfStream时锁死了,导致程序不能继续往下执行;不知道有什么好办法解决这个问题?
简单程序:
Process pRun = new Process();
pRun.StartInfo.FileName = "cmd.exe";
pRun.StartInfo.UseShellExecute = false;
pRun.StartInfo.RedirectStandardInput = true;
pRun.StartInfo.RedirectStandardOutput = true;
pRun.StartInfo.RedirectStandardError = true;
pRun.StartInfo.CreateNoWindow = true;
pRun.Start();
pRun.StandardInput.AutoFlush = true;
pRun.StandardInput.WriteLine(...)StreamReader reader = pRun.StandardOutput;
string line = reader.ReadLine();
while(!reader.EndOfStream) //开始执行顺利,在CMD结果返回有延迟时,程序就会锁死在这里
{
line = reader.ReadLine();
}
不知道说的够不够清楚...
简单程序:
Process pRun = new Process();
pRun.StartInfo.FileName = "cmd.exe";
pRun.StartInfo.UseShellExecute = false;
pRun.StartInfo.RedirectStandardInput = true;
pRun.StartInfo.RedirectStandardOutput = true;
pRun.StartInfo.RedirectStandardError = true;
pRun.StartInfo.CreateNoWindow = true;
pRun.Start();
pRun.StandardInput.AutoFlush = true;
pRun.StandardInput.WriteLine(...)StreamReader reader = pRun.StandardOutput;
string line = reader.ReadLine();
while(!reader.EndOfStream) //开始执行顺利,在CMD结果返回有延迟时,程序就会锁死在这里
{
line = reader.ReadLine();
}
不知道说的够不够清楚...
解决方案 »
- 菜鸟求解问题
- 没有.net 3.5framework的机器怎样装C#程序??是3.5不是2.0!不想装100多M的框架怎么办?有什么好方法?重提!!!
- 以WEB方式向在线用户和非在线用户发送消息。
- 为什么有时会在页面显示return false,当脚本有这样的语句时
- 无法将类型为Microsoft.office.interop.Excel.ApplicationClass的COM对象强制软件为Microsoft.office.interop.Excel._Application
- 如何连接internet的mysql数据库(C# win application)
- 我来问一个菜鸟的问题 请大家来帮帮忙拉!
- 算法,急。。。。
- 如何用c#获取IE地址栏中的URL啊???
- 请教高手~谢谢
- 没人给我顶我只能再次发帖子了
- 看到一段代码,不明白,向大家请教
在有StreamReader.Readline()存在时,一定要在cmd命令后跟上StandardInput.WriteLine("exit");
而不重定向输入pRun.StartInfo.RedirectStandardInput = false;
这个pRun.StandardInput.AutoFlush = true;
pRun.StandardInput.WriteLine(...)
自然也不需要。这样也可以。
重定向输入后,不exit它回一直等待输入吧。
我这里主要是实现开一个Process调用exe文件(带参数),还有一个process调用bat文件(同样带参数);我开始考虑process调用cmd,由cmd启动exe和bat,现在看来是绕远路了。