我有一个 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
从Kernel32.dll
. 您可以在此处查看文档。
另外根据文档:
进程可以使用 FreeConsole 函数将自身与其控制台分离。如果其他进程共享控制台,则控制台不会被销毁,但调用 FreeConsole 的进程无法引用它。当附加到控制台的最后一个进程终止或调用 FreeConsole 时,控制台将关闭。进程调用 FreeConsole 后,可以调用 AllocConsole 函数来创建新的控制台或 AttachConsole 以附加到另一个控制台。
因此我的猜测是,如果您打算在终止FormLessApp()
进程时从控制台分离,则不需要手动执行,它会自动销毁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句