是否可以在..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.
