C#:从控制台分离



我有一个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 方法?

FreeConsole from Kernel32.dll .您可以在此处查看文档。

同样根据文档:

进程可以使用 FreeConsole 函数将自身与其控制台分离。如果其他进程共享控制台,则控制台不会被销毁,但调用 FreeConsole 的进程无法引用它。当附加到控制台的最后一个进程终止或调用 FreeConsole 时,控制台将关闭。进程调用 FreeConsole 后,可以调用 AllocConsole 函数来创建新的控制台,也可以调用 AttachConsole 来附加到另一个控制台。

因此我的猜测是,如果您打算在终止FormLessApp()进程时与控制台分离,则无需手动执行此操作,它将自动销毁。

最新更新