- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在控制台模式下运行应用程序时,会有一些行写入控制台。
现在我想以编程方式执行此操作。这是我使用的一些示例代码:MSDN on OutputDataReceived Event
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
,但它没有产生任何数据。
最佳答案
正如其他人所发现的,存在一个错误,其中 _sortOutput
将为空。但不管怎样,你是完全正确的:e.Data
可以而且将会是 null!
事实上,当执行调用的 AsyncStreamReader 到达正在执行的标准输出的 EOF 时,您的处理程序应该总是被调用时 e.Data
等于 null redirected - 这将在您正在运行的进程退出时发生。当然,除非您先注销 OutputDataReceived 事件处理程序,或者取消异步输出重定向。
关于c# - 处理 RedirectStandardOutput 为空且 DataReceivedEventArgs.Data 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360756/
我正在使用 ffmpeg 在视频中添加水印。我正在尝试在控制台上写日志,但我不知道为什么我的 MyEvent事件没有调用。 public void ConvertVideo(string path)
我正在尝试扩展 DataReceivedEventArgs,以便我可以将附加数据传递给扩展 Process 的类。与仅在连接到 Process.OutputDataReceived 时从进程中获取数据
我正在启动一个进程并重定向错误流以便能够解析它并了解发生了什么。我是这样做的: _proc.ErrorDataReceived += new DataReceivedEventHandler(NetE
在控制台模式下运行应用程序时,会有一些行写入控制台。 现在我想以编程方式执行此操作。这是我使用的一些示例代码:MSDN on OutputDataReceived Event private stat
我是一名优秀的程序员,十分优秀!