使用Process.Start捕获所有stdout数据

时间:2014-02-15 05:30:18

标签: c# .net process stdout

我有一个产生的进程,它向stdout喷出大约3MB /秒。我想捕获所有这些数据。 .NET Process.Start具有RedirectStandardOutput属性,用于创建附加到stdout文件句柄的FileStream对象。它创建FileStream,缓冲区大小为4096字节。这对我的需求来说太微不足道了。当我可以启动后台线程来读取重定向的stdout时,我已经错过了几百千字节的数据。有没有办法解决?这是我的代码:

        var psi = new ProcessStartInfo
        {
            Arguments = CreateArgs(@"..."),
            CreateNoWindow = true,
            FileName = @"...",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            WorkingDirectory = @"...",
        };

        var process = new Process{StartInfo = psi, EnableRaisingEvents = true };
        process.ErrorDataReceived += (sender, args) => Dispatcher.Invoke(() => _stderr.AppendText(args.Data)); // log this
        process.Start();
        Task.Run(() =>
        {
            var buffer = new byte[size];
            using (var reader = new BinaryReader( ((FileStream)process.StandardOutput.BaseStream).))
            {
                while (!process.HasExited)
                {
                    reader.Read(buffer, 0, buffer.Length);
...

0 个答案:

没有答案