【发布时间】:2011-10-30 14:26:12
【问题描述】:
我正在编写一个 C# winform 应用程序,它启动第二个进程来执行 shell 命令,如“dir”和“ping”。我重定向第二个进程的输出,以便我的应用程序可以接收命令结果。它大致工作正常。
唯一的问题是我的 winform 应用程序将命令行输出作为一个整体而不是逐行接收。例如,它必须等待外部“ping”命令完成(这需要几秒钟或更长时间),然后一次接收整个输出(多行)。
我想要的是应用程序实时接收 cmdline 输出,即按行而不是按块。这可行吗?
我正在使用此代码来读取输出: while ((result = proc.StandardOutput.ReadLine()) != null)
但它并没有按我预期的方式工作。 提前致谢。
编辑:这是我正在使用的代码:
System.Diagnostics.ProcessStartInfo procStartInfo = new
System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// The following commands are needed to redirect the standard output.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result;
try {
while ((result = proc.StandardOutput.ReadLine()) != null)
{
AppendRtfText(result+"\n", Brushes.Black);
}
} // here I expect it to update the text box line by line in real time
// but it does not.
【问题讨论】:
-
显示您尝试过的代码会很有帮助。