写了一个小程序启动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();
}
不知道说的够不够清楚...

解决方案 »

  1.   

    又试了下,应该是reader.ReadLine();函数超时,导致线程锁死,不知道怎么解决...
      

  2.   

    好吧,是我自己程序的问题;
    在有StreamReader.Readline()存在时,一定要在cmd命令后跟上StandardInput.WriteLine("exit");
      

  3.   

    或者设置pRun.StartInfo.Arguments="dos命令.....";
    而不重定向输入pRun.StartInfo.RedirectStandardInput = false;
    这个pRun.StandardInput.AutoFlush = true;
    pRun.StandardInput.WriteLine(...)
    自然也不需要。这样也可以。
    重定向输入后,不exit它回一直等待输入吧。
      

  4.   

    process的调用原来不怎么用,最近用到了才临时抱佛脚;
    我这里主要是实现开一个Process调用exe文件(带参数),还有一个process调用bat文件(同样带参数);我开始考虑process调用cmd,由cmd启动exe和bat,现在看来是绕远路了。