当前位置 : 主页 > 网页制作 > HTTP/TCP >

.net – 当收到任何字符串而不是在行尾时,System.Diagnostic可以重定向输出吗?

来源:互联网 收集:自由互联 发布时间:2021-06-16
是否可以在..Ccur而不是在行尾时从System.Diagnostic.Process接收输出? 此刻,我有 psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; psi.Use
是否可以在..Ccur而不是在行尾时从System.Diagnostic.Process接收输出?
此刻,我有

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.

网友评论