【问题标题】:Enabling a console application through a Windows Forms application通过 Windows 窗体应用程序启用控制台应用程序
【发布时间】:2012-10-24 05:19:37
【问题描述】:

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

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

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

编辑:

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

【问题讨论】:

    标签: c# winforms console-application


    【解决方案1】:

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

    如果您的控制台应用程序只需要向调用表单应用程序回传 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

    【讨论】:

    • 在“应用程序必须有权访问整个程序的所有变量和资源,反之亦然”这句话中,“应用程序”是指“控制台应用程序”和“整个程序”我的意思是解决方案中所有被编译的东西。就我而言,我不需要从控制台应用程序返回值。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 在我的例子中没有太多的交流:只是在第二种形式中改变了几个布尔变量。变量值的变化会导致控制台应用程序停止、暂停和恢复进程。并且有 2 个整数可以在工作开始前调整工作量。通信将通过变量而不是命令进行。
      • 发送的消息是字符串,因此您可以在控制台应用程序中解析这些消息并根据收到的字符串的内容更改值。侦听器被添加为事件处理程序,因此您只需将代码用于解析字符串并从事件方法中修改变量。每当您通过事件检测到主应用程序中的更改时,您都可以使用该事件将字符串发送到您的控制台应用程序。
      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多