【发布时间】:2011-03-02 20:24:54
【问题描述】:
我目前正在为解释性编程语言编写一个小型编辑器。当程序运行时,编辑器(用 C# 编写)创建一个新进程来触发解释器(用 C++ 编写)。控制台与其他任何 C++ 程序一样出现,显示程序的输出。
当解释器(即 C++ 程序)在代码中遇到错误时,将向标准错误打印一条消息,指出错误类型和发生错误的行号。我想做的是从编辑器中读取解释器的标准错误,因此编辑器可以突出显示错误行,如错误消息中所示。
不幸的是,下面的代码(旨在读取标准错误)不知何故导致程序的标准输出也没有打印到控制台!
private void indicateErrorTest(object sendingProcess, DataReceivedEventArgs outLine)
{
MessageBox.Show(outLine.Data);
}
private void run()
{
program = new Process();
program.StartInfo.FileName = INTERPRETER_PATH;
program.StartInfo.Arguments = "\"" + relativeFilename + "\"";
program.StartInfo.RedirectStandardError = true;
program.StartInfo.UseShellExecute = false;
program.ErrorDataReceived += new DataReceivedEventHandler(indicateErrorTest);
program.Start();
program.BeginErrorReadLine();
program.EnableRaisingEvents = true;
program.Exited += new System.EventHandler(onProgramConsoleClose);
}
我什至不确定是什么导致输出不被写入。否则,程序的行为完全符合预期。有没有办法让标准输出仍然写入控制台,同时仍然读取标准错误?
或者有没有更好的方法从解释器进程中获取错误指示?
【问题讨论】: