C#中控制台的Windows Forms +命令

Mar*_*cka 8 c# debugging console winforms

我已经阅读了一些关于组合Windows窗体和控制台应用程序的程序的主题,但似乎我的问题还没有解决.是否可以从cmd-line运行程序并能够通过表单和cmd-line命令控制应用程序?它的意思是:

  • 对于通过(Windows窗体)表单控制应用程序的应用程序的普通用户,
  • 用于调试和高级用户通过控制台控制应用程序(并可选择查看Windows窗体中发生的情况))

我知道我想要的东西是非常重要的,它可能意味着很多工作,但我仍然想知道如何正确地做到这一点.

Han*_*ant 5

这并不难,只需P/Invoke AllocConsole()API函数来创建自己的控制台.例如,使您的Program.cs源代码文件如下所示:

  static class Program {
    [STAThread]
    static void Main() {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
#if DEBUG
      CreateConsole();
#endif
      Application.Run(new Form1());
    }

    static void CreateConsole() {
      var t = new System.Threading.Thread(() => {
        AllocConsole();
        for (; ; ) {
          var cmd = Console.ReadLine();
          if (cmd.ToLower() == "quit") break;
          // Etc...
        }
        FreeConsole();
      });
      t.IsBackground = true;
      t.Start();
    }
    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    private static extern bool AllocConsole();
    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    private static extern bool FreeConsole();
  }
Run Code Online (Sandbox Code Playgroud)