我有一个C#winform应用程序,其中的优化模型由OR-Tools解决。优化求解器具有将整个优化过程作为stdout发送的功能,可以通过以下方式完成:

    Slvr.EnableOutput();
    Solver.ResultStatus restatus = Slvr.Solve();


但是,求解器不会自动打开控制台。
目前,我所做的是:

项目属性->应用程序->输出类型->控制台应用程序

并且控制台从应用程序开始到运行结束都准备就绪。因此,该过程标准输出将自动显示。

我想要的是在运行上述代码的时候完全打开控制台,并显示求解器的标准输出。然后,等待用户输入键以关闭控制台并继续执行主应用程序。

最佳答案

我想您的问题是您正在尝试在GUI进程内部将Winners应用程序作为Winforms应用程序的一部分运行吗?但是通常在Winforms应用程序中禁用Console输出。您基本上有两个选择:


使用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/

10-17 01:43