c# - 如何捕获过程的输出(来自 OR Tools 求解器)并通过控制台显示它

标签 c# or-tools

我有一个 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/

相关文章:

c# - WPF 中的动态控件 - 添加可变数量的控件

c# - 在 Controller asp.net-core v1.1.0 之外使用 Dependency Injection 进行应用程序设置

c# - 如何验证 .NET 自包含的单个文件可执行文件?

python - 如何向 Google OR-Tools jobshop 示例添加截止日期?

c# - ORTools SAT 替代 CS IntVar[].Element(IntExpr index) 以计算互惠分配的成本

c# - 允许用户选择要使用的代码实现

c# - 使用附加到进程在 Visual Studio 2008 中调试 DLL 项目

or-tools - 是否可以在 OR-Tools 中向 CP-Solver 模型添加 XOR 方程约束?

python - 向 cp_model、ortools 添加多项选择约束

或工具:某些位置的 slack_max 是不同的