我有一个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()
进程时与控制台分离,则无需手动执行此操作,它将自动销毁。