首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程RedirectStandardOutput为空,DataReceivedEventArgs.Data为空

进程RedirectStandardOutput为空,DataReceivedEventArgs.Data为空
EN

Stack Overflow用户
提问于 2013-03-12 12:06:23
回答 3查看 4.1K关注 0票数 3

在控制台模式下运行应用程序时,有一些行写入控制台。

现在我想以编程的方式来做这件事。下面是我使用的一些示例代码:关于OutputDataReceived事件的MSDN

代码语言:javascript
复制
private static StringBuilder _sortOutput = null;

var proc = new Process();
                var info = new ProcessStartInfo();
            info.FileName = @"C:\SomeApp.exe";

            info.UseShellExecute = false;
            info.WindowStyle = ProcessWindowStyle.Normal;
            info.CreateNoWindow = false;

            proc.StartInfo = info;

            info.RedirectStandardOutput = true;
            info.RedirectStandardError = true;

            proc.OutputDataReceived += HandleOutputData;
            proc.ErrorDataReceived += HandleOutputData;

            proc.Start();
            proc.BeginOutputReadLine();
            proc.BeginErrorReadLine();

            proc.WaitForExit();

            var exitCode = proc.ExitCode;
            var output = _sortOutput.ToString();


    private void HandleOutputData(object sender, DataReceivedEventArgs e)
    {
        _sortOutput.Append(e.Data);
    }

但是DataReceivedEventArgs.Data总是为null,并且我不能返回在打开的控制台窗口中看到的结果。

如何接收输出?有办法做到这一点吗?

更新

我还试图直接读取proc.StandardOutput,但它不产生任何数据。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-12 12:24:18

它是空的,因为您在var outPut中读取数据

尝试以下几个方面:

( a)改变你处理它的方式

代码语言:javascript
复制
proc.OutputDataReceived += new DataReceivedEventHandler(HandleOutputData);

(B)注释掉这一行

代码语言:javascript
复制
//var outPut = proc.StandardOutput.ReadToEnd();
票数 2
EN

Stack Overflow用户

发布于 2015-10-20 23:24:38

正如其他人所发现的那样,存在一个_sortOutput将为空的bug。但无论如何,您都是完全正确的:e.Data可以并且将是空的!

实际上,当正在执行调用的e.Data到达被重定向的标准输出的EOF时,您的处理程序应该总是以等于null的形式调用--这将在您运行的进程退出时发生。当然,除非首先取消OutputDataReceived事件处理程序的注册,或者取消异步输出重定向。

票数 3
EN

Stack Overflow用户

发布于 2016-06-23 15:38:34

Null表示异步流的结束。您必须同时使用WaitForExit并等待终止null通过e.Data

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15360756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档