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

C# 通过Windows窗体应用程序启用控制台应用程序,c#,winforms,console-application,C#,Winforms,Console Application,我不打算详细说明我为什么要这样做,而不是让主应用程序来完成这项工作。我觉得现在对我来说比较容易。但我以后不会使用这种技术 在我的例子中,主窗体有一个打开另一个窗体的按钮。在第二个示例中,您可以调整控制台应用程序的数量、暂停、恢复和停止工作(听起来完全没有用(可能很愚蠢),但正如我所说,我不打算详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然 我知道如何通过主窗体启动新窗体,但不知道如何启动控制台应用程序 编辑: 我忘了提到,控制台应用程序是解决方案的一部分。您可以直

我不打算详细说明我为什么要这样做,而不是让主应用程序来完成这项工作。我觉得现在对我来说比较容易。但我以后不会使用这种技术

在我的例子中,主窗体有一个打开另一个窗体的按钮。在第二个示例中,您可以调整控制台应用程序的数量、暂停、恢复和停止工作(听起来完全没有用(可能很愚蠢),但正如我所说,我不打算详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然

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

编辑:


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

您可以直接调用Main。不过,请注意不要直接在UI线程上执行此操作

SomeConsoleApp.Main(new string[]{"-O", "File 1.txt", "-some-parameter"});
或者,如果您只有一个exe,则可以执行以下操作:

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

您需要创建控制台仿真器(耗时且很难正确操作),或者在另一个进程中启动cmd.exe,并使用远程过程调用在两个进程之间进行通信

如果您希望在两个进程之间进行通信,请查看以下库:

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


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

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

如果您的控制台应用程序只需要与调用的表单应用程序通信RPC已成功,则在控制台应用程序中使用退出代码,请参阅:


否则,这个问题以前已经得到了回答:

在我的例子中,没有太多的交流:只有一些布尔变量以第二种形式被更改。变量值的更改会导致控制台应用程序停止、暂停和恢复该过程。有两个整数在工作开始前调整工作量。通信将通过变量而不是命令进行。发送的消息是字符串,因此您可以在控制台应用程序中解析这些消息,并根据接收到的字符串内容更改值。监听器是作为事件处理程序添加的,因此您只需要将代码放在事件方法中解析字符串并修改变量。每当您通过事件检测到主应用程序中的更改时,您都可以使用该事件向控制台应用程序发送字符串。在“应用程序必须能够访问整个程序的所有变量和资源,反之亦然”这句话中,我指的是“控制台应用程序”和“整个程序”我指的是解决方案中编译的所有内容。在我的例子中,我不需要从控制台应用程序返回值。