-1

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

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

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

编辑:

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

4

4 回答 4

2

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

如果您的控制台应用程序只需要与调用表单应用程序进行通信,表明 RPC 已成功,则在控制台应用程序中使用退出代码,请参阅:如何将值从控制台应用程序返回到 .NET 中的服务?

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

于 2012-10-23T21:19:37.370 回答
1

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

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

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

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

于 2012-10-23T20:52:48.173 回答
1

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

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

或者,如果您只有一个 exe,您可以执行以下操作:

System.Diagnostics.Process.Start("someconsoleapp.exe");
于 2012-10-23T20:48:43.603 回答
1

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

于 2012-10-23T20:50:27.987 回答