从GUI执行时,流程过早结束,而通过控制台测试应用程序执行时,流程未提前结束

时间:2019-06-05 14:07:10

标签: c# .net winforms

很抱歉,如果标题与我所遇到问题的准确描述不符,我接受修改建议。

我正在开发一个组件,该组件在被调用时将启动一个流程并等待其完成。流程可能希望将标准输出重定向到自定义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行。

0 个答案:

没有答案