我不打算详细说明为什么要这样做,而不是让主应用程序完成这项工作。我认为目前对我来说更容易。但我将来不会使用这种技术。
在我的例子中,主窗体有一个打开另一个窗体的按钮。在第二个中,您可以调整控制台应用程序的数量、暂停、恢复和停止工作(听起来完全没用(也许很愚蠢),但是,就像我说的,我不会详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然。
我知道如何通过主表单启动新表单,但我不知道如何启动控制台应用程序。
编辑:
我忘了提到,控制台应用程序是解决方案的一部分。
我不打算详细说明为什么要这样做,而不是让主应用程序完成这项工作。我认为目前对我来说更容易。但我将来不会使用这种技术。
在我的例子中,主窗体有一个打开另一个窗体的按钮。在第二个中,您可以调整控制台应用程序的数量、暂停、恢复和停止工作(听起来完全没用(也许很愚蠢),但是,就像我说的,我不会详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然。
我知道如何通过主表单启动新表单,但我不知道如何启动控制台应用程序。
编辑:
我忘了提到,控制台应用程序是解决方案的一部分。
您的要求有点模糊;“应用程序必须能够访问整个程序的所有变量和资源,反之亦然”。“变量和资源”不能跨进程共享,您将需要某种形式的进程间通信。
如果您的控制台应用程序只需要与调用表单应用程序进行通信,表明 RPC 已成功,则在控制台应用程序中使用退出代码,请参阅:如何将值从控制台应用程序返回到 .NET 中的服务?
否则之前已经回答过:Getting the output from Console window into Winform application
如果您想在两个进程之间进行通信,请在此处查看此库:
https://github.com/TheCodeKing/XDMessaging.Net
它允许您从一个应用程序向另一个应用程序发送消息。例如,App1在“randomkey”通道上向ConsoleApp1发送“stop”消息,ConsoleApp1可以在“randomkey”通道上监听并拦截“stop”消息并停止其当前处理。
如果您只想打开控制台窗口,只需使用 System.Diagnostics.Process.Start();
您可以直接调用 Main 。但请注意不要直接在 UI 线程上执行此操作!
SomeConsoleApp.Main(new string[]{"-O", "File 1.txt", "-some-parameter"});
或者,如果您只有一个 exe,您可以执行以下操作:
System.Diagnostics.Process.Start("someconsoleapp.exe");
您需要创建一个控制台模拟器(耗时且难以正确设置),或者在另一个进程中启动 cmd.exe 并使用远程过程调用(或另一种进程间通信方法)在两个进程之间进行通信