很抱歉,如果标题与我所遇到问题的准确描述不符,我接受修改建议。
我正在开发一个组件,该组件在被调用时将启动一个流程并等待其完成。流程可能希望将标准输出重定向到自定义winform(弹出窗口),以使用户对流程状态有反馈。
为了在正式应用程序中实施该组件之前对其进行测试,我开发了一个调用该模块的控制台应用程序,其方式与正式应用程序将接受来自GUI的用户输入->而不是弹出窗口相同,即应用程序主窗口。
在“控制台”应用中进行测试时,一切正常。在正式的GUI应用程序中进行测试时,进程过早结束,退出代码为0(都可以)。我的意思是,它会在用户winform中打印某些内容,直到某个点,总是相同的点,然后退出。
我不明白为什么或如何找出根本原因,也许对此有所作为。我正在寻求帮助,此后是用于流程执行的模块源代码:
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.FileName = myExePath;
processStartInfo.Arguments = myExeArguments;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = false;
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
using (Process process = Process.Start(processStartInfo))
{
process.EnableRaisingEvents = true;
// accessory code. Issue is reproduced even without this section ---- //
Thread t = new Thread(() =>
{
// show a custom winform for the user to read
});
t.Start();
// ------------------------------------------ //
process.OutputDataReceived += (s, a) => {
// Do something with a.Data
};
process.BeginOutputReadLine();
process.WaitForExit();
}
编辑:
让我们说Process myExe应该打印一些东西到stdout。我读到了一些东西,它遵循以下几句话:
line 1
line 2
I'm doing something
line 3
start doing something else <-- when component is integrated in official application, here Process Exits without exceptions
line 4
line 5 <-- When component is tested in Console app, here is where Process Exits without exceptions.
在测试场景和官方场景中,我都应该阅读第5行。