C#处理标准输出延迟在C#形式下,我运行的进程启动信息类似于Redirectconsoleoutputtoatextboxinaseparateprogram和Catruntime#getprocess输出,过程运行正确,但输出需要很长时间才能出现在DataReceived事件中。我想在进程生成后立即看到文本;根据无法捕获进程标准输出?(第一条评论)我需要等到事件被触发才能填充2到4kb的缓冲区。根据要求,这是代码:voidpcs_OutputDataReceived(objectsender,System.Diagnostics.DataReceivedEventArgse){if(!string.IsNullOrEmpty(e.Data))textBox1.BeginInvoke((Action)delegate{textBox1.AppendText(text+"n");});}privatevoidLER_Go_Click(objectsender,EventArgse){//变量LiDARExtRep包含可执行文件的完整路径//在DOS中运行并产生详细输出。//LER_Path.Text是传递给LiDARExtRep的参数(本例只有一个参数)ProcessStartInfopStartInfo=newProcessStartInfo(LiDARExtRep,LER_Path.Text);pStartInfo.UseShellExecute=false;pStartInfo.ErrorDialog=false;pStartInfo.RedirectStandardError=true;pStartInfo.RedirectStandardInput=true;pStartInfo.RedirectStandardOutput=true;pStartInfo.CreateNoWindow=true;System.Diagnostics.Processpcs=newSystem.Diagnostics.Process();pcs.StartInfo=pStartInfo;boolpStarted=pcs.Start();pcs.OutputDataReceived+=newDataReceivedEventHandler(pcs_OutputDataReceived);pcs.BeginOutputReadLine();pcs.WaitForExit();我没有看到它有什么特别之处,它与我引用的示例完全相同......简单的“Dir”,“/bintheconstructor/s”应该产生相同的结果有没有办法减少缓冲区几个字节或更好的方法来执行命令行工具并“实时”接收输出?背景:我用C++写过一些命令行程序,效果不错,但年轻一代似乎害怕DOS,所以我创建了一个表单(GUI)来收集这些工具的参数,因为它似乎更容易而不是尝试在C++中为每个程序设置GUI。如果我无法获得实时响应,我将不得不使用UseShellExecute=true;并显示命令窗口。缓冲发生在控制台终端中。默认情况下,如果重定向是已知的,stdout是完全缓冲的:如果已知stdout不是指交互设备,则流是完全缓冲的。否则,流是行缓冲还是默认缓冲取决于库(请参阅setvbuf)。资源因此,除非您可以更改控制台程序源以禁用缓冲,否则您无法在GUI终端上执行任何操作。以上就是C#学习教程:C#处理标准输出延时分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
