我有一个 C# winform 应用程序,其中优化模型是通过 OR-Tools 求解的。优化求解器能够将整个优化过程作为标准输出发送。这是通过以下方式完成的:
Slvr.EnableOutput();
Solver.ResultStatus restatus = Slvr.Solve();
但是,求解器不会自动打开控制台。 目前,我所做的是:
项目属性 --> 应用程序 --> 输出类型 --> 控制台应用程序
并且控制台从应用程序运行开始到结束都准备就绪。因此,该进程的标准输出会自动显示。
我想要的是在运行上述部分代码时准确打开控制台并显示解算器的标准输出。然后等待用户按键关闭控制台并继续主应用程序。
最佳答案
我猜你的问题是你正在尝试将求解器作为 Winforms 应用程序的一部分在 GUI 进程内运行,对吗?但控制台输出通常在 Winforms 应用程序中被禁用。您基本上有两个选择:
使用 this older SO answer 中描述的选项之一附加一个控制台窗口以输出到 Winforms 应用程序
将应用程序拆分为两个 exe 文件:一个运行求解器的命令行程序,以及一个仅包含 UI 的 Winforms 部分。然后通过 System.Diagnostics.Process.Start 将命令行部分作为单独的进程运行,这允许对输出重定向进行细粒度控制。您可能需要 UI 将参数传递给命令行程序,例如,通过使用临时文件。
第二个选项需要更多工作,特别是对于 GUI 和命令行工具之间的通信,但可以通过 GUI 不被阻塞的方式更轻松地实现,对于求解器部分中的错误/程序崩溃更加鲁棒,并且如果您想引入并行化/一次运行多个求解器进程,通常会表现得更好。
关于c# - 如何捕获过程的输出(来自 OR Tools 求解器)并通过控制台显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739813/