我不打算详细说明为什么要尝试这样做,而不是让主应用程序完成工作。我认为这对我来说更容易。但是我将来不打算使用这种技术。
在我的情况下,主窗体有一个按钮,可以打开另一个窗体。在第二个中你可以调整数量,暂停,恢复和停止控制台应用程序的工作(声音完全没用(也许是愚蠢的),但是,就像我说的,我不打算详细说明原因)。这意味着应用程序必须能够访问整个程序的所有变量和资源,反之亦然。
我知道如何通过主窗体启动新表单,但我不知道如何启动控制台应用程序。
编辑:
我忘了提到,控制台应用程序是解决方案的一部分。
答案 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();