通过Windows窗体应用程序启用控制台应用程序

时间:2012-10-23 20:47:18

标签: c# winforms console-application

我不打算详细说明为什么要尝试这样做,而不是让主应用程序完成工作。我认为这对我来说更容易。但是我将来不打算使用这种技术。

在我的情况下,主窗体有一个按钮,可以打开另一个窗体。在第二个中你可以调整数量,暂停,恢复和停止控制台应用程序的工作(声音完全没用(也许是愚蠢的),但是,就像我说的,我不打算详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然。

我知道如何通过主窗体启动新表单,但我不知道如何启动控制台应用程序。

编辑:

我忘了提到,控制台应用程序是解决方案的一部分。

4 个答案:

答案 0 :(得分:2)

你的要求有点模糊; “应用程序必须能够访问整个程序的所有变量和资源,反之亦然”。 “变量和资源”不能跨进程共享,而是需要某种形式的进程间通信。

如果您的控制台应用程序仅需要与RPC成功的调用表单应用程序进行通信,请使用控制台应用程序中的退出代码,请参阅:How do I return a value from a console application to a service in .NET?

否则之前已经回答过:Getting the ouput from Console window into Winform application

答案 1 :(得分:1)

您可以直接致电Main。请注意直接在UI线程上执行此操作!

SomeConsoleApp.Main(new string[]{"-O", "File 1.txt", "-some-parameter"});

或者,如果你只有一个exe,你可以这样做:

System.Diagnostics.Process.Start("someconsoleapp.exe");

答案 2 :(得分:1)

您需要创建一个控制台模拟器(耗时且难以正确),或者在另一个进程中启动cmd.exe并使用远程过程调用(or another inter process communication method)在两个进程之间进行通信

答案 3 :(得分:1)

如果您想在这两个流程之间进行通信,请在此处查看此库:

https://github.com/TheCodeKing/XDMessaging.Net

它允许您将消息从一个应用程序发送到另一个应用程序。例如,App1在通道“randomkey”上向ConsoleApp1发送消息“stop”,ConsoleApp1可以在通道“randomkey”上侦听并拦截“stop”消息并停止其当前处理。

如果您只想打开控制台窗口,只需使用System.Diagnostics.Process.Start();