我有一个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方法?
答案 0 :(得分:0)
FreeConsole
的 Kernel32.dll
。您可以看到文档here。
另外根据文件:
进程可以使用FreeConsole函数将自己从控制台中分离出来。如果其他进程共享控制台,则不会销毁控制台,但调用FreeConsole的进程无法引用它。当连接到它的最后一个进程终止或调用FreeConsole时,控制台将关闭。在一个进程调用FreeConsole之后,它可以调用AllocConsole函数来创建一个新的控制台或AttachConsole来连接到另一个控制台。
因此,我的猜测是,如果您计划在终止FormLessApp()
流程时从控制台分离,则不需要手动执行此操作,它将自动销毁。