是否可以在..Ccur而不是在行尾时从System.Diagnostic.Process接收输出? 此刻,我有 psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; psi.Use
此刻,我有
psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; psi.UseShellExecute = false; reg = System.Diagnostics.Process.Start(psi); reg.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler); reg.BeginOutputReadLine();
如您所见,对BeginOutputReadLine的调用允许我仅在找到结束行时读取(重定向)输出.
是否存在相同的方法,但是当进程将任何char发送到输出时调用委托“?
谢谢
似乎异步方法/事件不允许您从输出中读取单个字符(仅完整行,如方法名称所示).以下代码执行您想要的操作,但是以同步方式执行:
class Program { public static bool Exit = false; static void Main(string[] args) { var p = new Process { StartInfo = { FileName = @"program-not-outputting-newlines", Arguments = "test", UseShellExecute = false, RedirectStandardOutput = true }, EnableRaisingEvents = true }; p.Start(); var s = p.StandardOutput; p.Exited += (sender, e) => Exit = true; while(!Exit) { Console.Write((char) s.Read()); } Console.Read(); } }
对s.Read()的调用似乎阻止了当前线程(即使它有一个ReadBlock()版本 – 文本编写者可能误解了),所以你可能想在一个单独的线程中做这个并做一些消息传递/ eventraising你自己使它异步.
我测试的程序是一个简单的循环,输出0到10之间的整数,随机间隔,中间没有换行符,每次写入都调用Console.Out.Flush.