C#:从控制台分离

时间:2017-05-17 08:31:45

标签: c# winforms console-application

我有一个Windows窗体应用程序,但是当命令行传递参数时,它有时会表现为无形(控制台应用程序)。如果没有传递参数,那么它的行为就像普通的Windows窗体一样。

当它作为控制台应用程序运行时,我附加到控制台以使用Console.WriteLine()输出消息。

[DllImport("kernel32.dll")]
static extern bool AttachConsole(int input);

static void Main(string[] args)
{            
    if (args.Length == 0)
    {   
        Application.Run(new MyForm());
    }
    else 
    {
        // case args.Length > 0
        AttachConsole(-1);
        Console.WriteLine("Start my formless app...");
        new FormLessApp().Start();
    }
}

但是我不确定当无格式应用程序完成时我是否需要从控制台中取消。有必要吗?如果是这样我必须使用哪种DLL方法?

1 个答案:

答案 0 :(得分:0)

来自FreeConsole

Kernel32.dll。您可以看到文档here

另外根据文件:

  

进程可以使用FreeConsole函数将自己从控制台中分离出来。如果其他进程共享控制台,则不会销毁控制台,但调用FreeConsole的进程无法引用它。当连接到它的最后一个进程终止或调用FreeConsole时,控制台将关闭。在一个进程调用FreeConsole之后,它可以调用AllocConsole函数来创建一个新的控制台或AttachConsole来连接到另一个控制台。

因此,我的猜测是,如果您计划在终止FormLessApp()流程时从控制台分离,则不需要手动执行此操作,它将自动销毁。