2012-10-23 138 views
-1

我不打算详细说明为什么要尝试这样做,而不是让主应用程序执行此操作。我认为现在对我来说更容易。但我将来不会使用这种技术。通过Windows窗体应用程序启用控制台应用程序

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

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

编辑:

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

回答

1

您可以直接调用Main。小心在UI线程上直接做到这一点!

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

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

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

我以某种方式期待一个更复杂的答案... – AlexSavAlexandrov

1

如果你想两个进程之间的沟通,看看这个库这里之间进行通信:

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

它可以让你从一个应用程序发送消息给对方。例如,App1在通道“randomkey”上向ConsoleApp1发送一条消息“stop”,ConsoleApp1可以在通道“randomkey”上侦听并拦截“stop”消息并停止其当前处理。

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

+0

在我的情况下,没有太多的沟通:只是一些布尔变量在第二种形式被改变。变量值的更改会导致控制台应用程序停止,暂停和恢复过程。有两个整数可以在工作开始之前调整工作量。通信将发生在变量上,而不是命令。 – AlexSavAlexandrov

+0

发送的消息是字符串,因此您可以解析Console应用程序中的消息,并根据收到的字符串内容更改值。监听器被添加为事件处理程序,所以您只需要将代码解析为字符串并从事件方法中修改变量即可。每当通过事件检测到主应用程序发生更改时,您都可以使用该事件将字符串发送到控制台应用程序。 – Lunyx

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

+0

在“应用程序必须能够访问整个程序的所有变量和资源,反之亦然”这句话中,“应用程序”的意思是“控制台应用程序”,而“整个程序”是指所有的解决方案被编译。在我的情况下,我不需要从控制台应用程序返回值。 – AlexSavAlexandrov

相关问题