Can';t是否正确检测到cmd命令从c#退出?

Can';t是否正确检测到cmd命令从c#退出?,c#,.net,cmd,C#,.net,Cmd,我用这段代码执行cmd命令,它在大多数命令上运行良好,比如ver、cd。。。但是,对于像netstat或包含许多文件的文件夹上的diron这样需要更多时间执行的命令,它无法检测到该命令已完成 我可以使用timeout,但我想知道为什么它不能检测netstat命令的结束 string results=""; string command = @"dir c:\windows"; ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd",

我用这段代码执行cmd命令,它在大多数命令上运行良好,比如ver、cd。。。但是,对于像netstat或包含许多文件的文件夹上的
dir
on这样需要更多时间执行的命令,它无法检测到该命令已完成

我可以使用timeout,但我想知道为什么它不能检测netstat命令的结束

string results="";
string command = @"dir c:\windows";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();

results = proc.StandardOutput.ReadToEnd(); //<-Move here

proc.WaitForExit();

//results = proc.StandardOutput.ReadToEnd(); //Moved

Console.WriteLine(results);
字符串结果=”;
string命令=@“dir c:\windows”;
ProcessStartInfo procStartInfo=新的ProcessStartInfo(“cmd”、“/c”+命令);
procStartInfo.RedirectStandardInput=true;
procStartInfo.RedirectStandardOutput=true;
procStartInfo.RedirectStandardError=true;
procStartInfo.UseShellExecute=false;
procStartInfo.CreateNoWindow=true;
Process proc=新流程();
proc.StartInfo=procStartInfo;
proc.Start();

结果=proc.StandardOutput.ReadToEnd()// 使用您的代码,我无法重现问题:

你所说的是不可能的,使用:

指示流程组件无限期地等待关联的流程退出


编辑1:


即使使用
dir c:\Windows(耗时一分钟),我也无法重现问题。

使用您的代码,我无法重现问题:

你所说的是不可能的,使用:

指示流程组件无限期地等待关联的流程退出


编辑1:


即使使用
dirc:\Windows
(花费了一分钟),我也无法重现这个问题。

netstat是一个exe。无需通过cmd启动。也许这有助于您读取outputnetstat是一个exe。无需通过cmd启动。也许这有助于你阅读输出如果你有一些连接,它可以正常工作,但是如果你有很多连接,它就不工作了。您可以使用另一个命令,如string command=@“dir c:\windows”;它也有同样的问题,因为windows中的连接太多。你使用的是哪个版本的.net和操作系统?windows 7、.net 4.7如果你有几个连接,它就可以工作,但是如果你有很多连接,它就不能工作。您可以使用另一个命令,如string command=@“dir c:\windows”;它也有同样的问题,因为windows中的FIE很多。您使用的是哪个版本的.net和操作系统?windows 7、.net 4.7