我分析原因如下:
    c#调用cmd命令执行va.exe并且希望读取数据的时候,va.exe一直向管道中写入数据,但是c#程序一直没有读取数据的机会。Sleep(100)时一直等待,直到缓冲区满,va.exe阻塞,c#才开始读取数据;而Sleep(1)的时候,缓冲区满的速度比较快,所以c#读取数据开始的就比较快。
    但我现在想实现va.exe写数据的同时,c#可以读取数据,如何实现?

解决方案 »

  1.   

    C++这端可调么?如果可以,使用匿名管道的通讯方式可以解决。 它的前提是两个进程在同一机器,并且是父子进程。可以msdn查一下。实现比较简单。
      

  2.   

    SLEEP在循环体中,要不需要数十秒就不正常了(7000*0.1)
      

  3.   

    在我的印象中,Sleep(1)有较特殊的含义,一般的Sleep低于40ms(准确是35?不太确定)CLR是不响应的,而Sleep(1)相当于挂起当前线程,给其他线程让路,在线程循环中常用。
      

  4.   

    是7000个Sleep(100) =700秒的问题
    进程.StandardOutput.ReadLine就是流输出的每行字符串
      

  5.   

    string commandLine = @"c:\windows\system32\cmd.exe"; 
    string arguments = "va.exe "; 改为string commandLine = @"va.exe"; 
    string arguments = "";即不通过cmd调用,会得到我想要的效果。但是,通过cmd调用,我可以在参数行使用管道对va.exe的结果进一步处理,现在只能在c#进行处理了。
      

  6.   

    已经解决,arguments可以使用参数以及管道。