【问题标题】:Hybrid windows forms and console app without console window in forms mode混合窗体和窗体模式下没有控制台窗口的控制台应用程序
【发布时间】:2015-01-26 11:33:38
【问题描述】:

我想创建一个完整的混合应用程序,同时作为Windows FormsConsole Application 工作。当我不带参数或不在控制台中执行它时,我希望应用程序打开 GUI 并离开控制台,就像从控制台调用普通 Windows 窗体应用程序一样,但要响应用户并通过在通知某些参数时进行控制台,例如接受条款和条件或确认文件覆盖。这可能吗?

P.S.:我不介意在运行 GUI 时有控制台输出,但我希望控制台在 GUI 上运行时保持隐藏,而在作为控制台运行时没有 GUI。

注意

how to run a winform from console application? 中建议的解决方案(创建一个表单项目然后更改为控制台)没有关注我,因为当从资源管理器调用应用程序时它会打开一个控制台窗口。

【问题讨论】:

    标签: c# winforms user-interface console-application


    【解决方案1】:

    WinForms 和控制台应用程序之间的区别在于它们的编译方式略有不同(参见question)。控制台应用程序在清单中具有以下标志:

    .subsystem 0x0003 // WINDOWS_CUI

    和WinForms应用如下:

    .subsystem 0x0002 // WINDOWS_GUI

    有很多与此主题相关的问题。例如看到这个one。 一般来说,据我所知,没有理想的解决方案,但有一些解决方案在某种程度上是可行的。例如试试这个:

    1. 创建一个 WinForms 应用程序。
    2. site复制代码。
    3. 修改WinForms应用的Main方法,如下图。

    修改后的Main方法:

    [STAThread]
    private static void Main(string[] args)
    {
       if (args.Length == 0)
       {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          Application.Run(new Form1());
       }
       else
       {
          AllocateConsole();
          Console.WriteLine("I'm a console application");
          //...
          FreeConsole();
       }
    }
    

    这种方案的缺点是:

    1. 无法将控制台应用程序的输出重定向到文件。
    2. 如果从命令行启动控制台应用程序,则必须通过按键显式关闭。
    3. 另请阅读我上面指出的文章中的备注和重要事项

    【讨论】:

    • 谢谢,米哈尔!这并没有满足我的愿望,但解释了为什么我不能以我想要的方式获得我想要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多