编程语言
首页 > 编程语言> > c#-控制台应用程序也将作为GUI运行

c#-控制台应用程序也将作为GUI运行

作者:互联网

Before anyone marks this as Duplicate, Please read

我有一个Windows应用程序,用C#编写.

Image showing project Properties

现在我有一个要求,我也想从控制台运行它.像这样.

enter image description here

由于需要将输出显示到控制台,因此我将应用程序类型更改为“控制台应用程序”

enter image description here

现在的问题是,每当用户从Windows资源管理器中启动进程时(通过单击两次即可).控制台窗口也会在后面打开.

enter image description here

有办法避免这种情况吗?

在@PatrickHofman的帮助下,我尝试了什么.

>关注的how to run a winform from console application?

但是我还是有问题

>当我执行此操作https://stackoverflow.com/a/279811/3722884时,控制台将在新窗口中打开.我不要
>当我执行此https://stackoverflow.com/a/11058118/3722884时,即将-1传递给AllocConsole时,还会发生其他问题,如所引用的链接中所述.

解决方法:

好吧,我很好奇,我想我会在这玩.

>首先,我更新了Program.cs中的Main方法以接受参数,以便可以指定-cli并使应用程序在命令行上运行.
>其次,我在项目属性中将项目的输出类型更改为“控制台应用程序”.
>第三,我在Program.cs中添加了以下方法

private static void HideConsoleWindow()
{
    var handle = GetConsoleWindow();

    ShowWindow(handle, 0);
}

[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

>第四,我将HideConsoleWindow称为非CLI模式下的第一个动作.

完成这些步骤后,我的(基本)应用程序如下所示:

    [STAThread]
    static void Main(string[] args)
    {
        if (args.Any() && args[0] == "-cli")
        {
            Console.WriteLine("Console app");
        }
        else
        {
            HideConsoleWindow();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

然后,如果我使用-cli开关在命令行上打开程序,则该程序将作为命令行应用程序运行,并将内容打印到命令行中;如果我正常运行,它将短暂地(极其)加载命令行窗口,然后以您所期望的正常应用.

标签:windows-applications,console-application,c,net
来源: https://codeday.me/bug/20191119/2039650.html