【发布时间】:2010-09-09 19:27:45
【问题描述】:
我有一个基于控制台的 c 应用程序。 我正在使用重定向标准输出从 c# 静默执行它并同步执行它,效果很好。 现在我想以异步方式执行此操作,即提供同步方式的输出。 IE OutPutDataRecieved 事件被触发,但仅在控制台应用程序(exe)完成后触发。OutputDataRecieved 事件在完成后为每一行触发,而不是在输出中得到一行后立即触发。
异步代码适用于 CMD.exe 等,因此,我确信它的基于 c 的应用程序在输出中存在问题。 仅供参考:c 控制台中的输出是使用 printf 完成的。 根据我的发现: 我认为 c 控制台应用程序在完成执行之前不会向标准输出提供输出/写入。 我尝试在每次 printf 后将缓冲区设置为 null 或刷新,但没有任何效果。
有什么技巧吗??
【问题讨论】:
-
愿意发布您的 C# 代码的相关部分吗?
-
您有
C和c# 应用程序的源代码吗?如果您显示相关部分,也许会有所帮助。 -
当你说你将缓冲区设置为null时,你是在使用setvbuf函数吗?
-
C 运行时库在看到 stdout 流被重定向时会对其进行缓冲。只有当缓冲区填满并需要刷新时,您才能看到输出。或者当标准输出关闭时。
标签: c# c process console asynchronous