【发布时间】:2015-03-12 01:56:37
【问题描述】:
我有一个 C++ 程序,它使用wprintf_s 函数将结果打印到命令行。但是当我在 C# 中使用Process 来读取程序的输出时,我无法得到它的任何字眼。然而,当我在wprintf_s 语句之后添加fflush(stdout) 时,我终于可以在我的C# 程序中读取标准输出了。
我用来启动进度的代码是:
var proc = new Process {
StartInfo = new ProcessStartInfo {
FileName = "FILENAME",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
StringCollection values = new StringCollection();
proc.OutputDataReceived += (s, args) => {
lock (values) {
values.Add(args.Data);
}
};
proc.BeginOutputReadLine();
proc.WaitForExit();
谁能告诉我为什么fflush(stdout) 会起作用?
【问题讨论】:
-
因为它正在被缓冲。
-
@OldProgrammer 如果没有
fflush,输出将始终在缓冲区中? -
我在运行 Perl 脚本时遇到了类似的问题,它缓冲了标准输出,然后在脚本完成后立即全部刷新到我的 C# 应用程序中。
标签: c# c++ process redirectstandardoutput