Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过参数以控制台应用程序的形式运行应用程序,否则以Win Form应用程序的形式运行_C#_Winforms_Console Application - Fatal编程技术网

C# 通过参数以控制台应用程序的形式运行应用程序,否则以Win Form应用程序的形式运行

C# 通过参数以控制台应用程序的形式运行应用程序,否则以Win Form应用程序的形式运行,c#,winforms,console-application,C#,Winforms,Console Application,我有一个应用程序,我想这样运行: 如果args已发送-我希望它表现为控制台应用程序 如果未发送参数-我希望它作为windows窗体应用程序运行 当我将输出类型设置为console并且未检测到args时,我正在启用视觉样式并运行。它工作得很好,除了控制台窗口打开/关闭很快,这让我很烦恼。有没有办法不让控制台窗口出现?我正在寻找一种根本不创建它的方法。我会用另一种方法,让它成为一个WinForms应用程序,因为在创建任何东西之前(在program.cs的主函数中)就已经开始编写代码了 请参阅此链

我有一个应用程序,我想这样运行:

  • 如果args已发送-我希望它表现为控制台应用程序

  • 如果未发送参数-我希望它作为windows窗体应用程序运行


当我将输出类型设置为console并且未检测到args时,我正在启用视觉样式并运行。它工作得很好,除了控制台窗口打开/关闭很快,这让我很烦恼。有没有办法不让控制台窗口出现?我正在寻找一种根本不创建它的方法。

我会用另一种方法,让它成为一个WinForms应用程序,因为在创建任何东西之前(在program.cs的主函数中)就已经开始编写代码了

请参阅此链接:

  • 创建Windows.Forms应用程序
  • 添加一个外部函数

    [System.Runtime.InteropServices.DllImport( "kernel32.dll" )]
    private static extern bool AllocConsole();
    
  • 在应用程序的主要方法中:

    if ( windows_app )
    {
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1());
    }
    else
    { 
        AllocConsole();
        Console.WriteLine( "foo" );
    }
    

  • 我会反过来做,让它成为一个WinForms应用程序,因为在创建任何东西之前(在
    program.cs
    中的
    main
    函数中),你就已经开始编写代码了。你能把你的应用程序分成三个可执行文件吗?一个用于windows应用程序,一个用于console应用程序,另一个用于启动这两个应用程序中的一个?显然,您必须为引擎创建一个类库。上面的链接似乎已断开。您在其他地方有可以共享的内容吗?这里的挑战是AllocConsole()似乎要创建一个新的控制台窗口,而不是使用运行应用程序的控制台。“foo”将出现在新窗口中,当应用程序退出其命令行调用时,该窗口立即消失。